首页 > 解决方案 > 根据 Laravel 中的 url 返回特定的类

问题描述

我有这条路线

Route::get('/mailable/{mail}', [TestController::class, 'mailable'])
->where('mail', '(verification)');

基于来自 url 的 od{mail}我想从我的控制器返回特定的类

public function mailable($mail)
{
    if ($mail == 'verification') {
        return new Verification();
    }
}

有没有更好的方法来做到这一点,或者我需要放置数千条if语句。或者我应该使用switch

我也尝试$mail()返回类连接,但它不起作用

标签: phplaravel

解决方案


PHP 可以基于字符串做很多语法,所以如果你的输入名称总是通过将第一个字符大写来作为类名。您应该能够执行以下操作。

$className = "App\Models\\" . ucfirst($mail);

return new $className();

这也需要命名空间之间存在关系,另一种方法是将输入映射到输出。

protected $classMap = [
    'verification' => Verification::class,
]

return new $this->classMap[$mail]();

你很快就会变成一个滑坡,也许是时候考虑你是否想成为这个通用的了。这一切都取决于用例,我认为泛型类实例化不应该应用到任何地方。


推荐阅读