我有這條路線Route::get('/mailable/{mail}', [TestController::class, 'mailable'])->where('mail', '(verification)');基于{mail}url 的 od 我想從我的控制器返回特定的類(lèi)public function mailable($mail){ if ($mail == 'verification') { return new Verification(); }}有沒(méi)有更好的方法來(lái)做到這一點(diǎn),否則我需要發(fā)表數(shù)千條if聲明?;蛘呶覒?yīng)該使用switch?我也嘗試連接$mail返回()類(lèi),但它不起作用
1 回答

MM們
TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
PHP 可以基于字符串執(zhí)行很多語(yǔ)法,因此如果您的輸入名稱始終是類(lèi)名,則將第一個(gè)字符設(shè)為大寫(xiě)。您應(yīng)該能夠執(zhí)行以下操作。
$className = "App\Models\\" . ucfirst($mail);
return new $className();
這還要求命名空間之間存在關(guān)系,另一種方法是將輸入映射到輸出。
protected $classMap = [
'verification' => Verification::class,
]
return new $this->classMap[$mail]();
你很快就會(huì)陷入滑坡,也許是時(shí)候考慮一下你是否想變得如此通用了。這一切都取決于用例,我認(rèn)為通用類(lèi)實(shí)例化不應(yīng)該應(yīng)用在任何可以應(yīng)用的地方。
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報(bào)
0/150
提交
取消