php - 根据 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
与()
返回类连接,但它不起作用
解决方案
PHP 可以基于字符串做很多语法,所以如果你的输入名称总是通过将第一个字符大写来作为类名。您应该能够执行以下操作。
$className = "App\Models\\" . ucfirst($mail);
return new $className();
这也需要命名空间之间存在关系,另一种方法是将输入映射到输出。
protected $classMap = [
'verification' => Verification::class,
]
return new $this->classMap[$mail]();
你很快就会变成一个滑坡,也许是时候考虑你是否想成为这个通用的了。这一切都取决于用例,我认为泛型类实例化不应该应用到任何地方。
推荐阅读
- c++ - 需要帮助定义循环控制变量(while 循环)C++
- powerbi - 累积和和几个过滤器
- typescript - TS7017 暗示任何类型 + 类型推断
- ios - 在我的tableView中滚动时如何隐藏collectionView(知道这个ViewCONtroller是一半tableview和一半collectionview)
- c - 分段错误 - 使用 MPI 发送/接收的 C 中的矩阵乘法
- angular - Jasmine JS 理解全局上下文
- dictionary - Go 中的深度合并顺序图
- python - Python:计算具有多个孩子的树的最大高度
- kdb - 使用 embedpy 将 aq 表转换为 pandas 数据框
- python - 使用正则表达式拆分多个字符串