2
我有兩個類似的用戶配置文件,他們共享幾乎相同的視圖結構和信息。但是,「特殊用戶配置文件」會顯示一個附加的塊,並需要一個不同的URL - 例如/user/igor
和/special-user/igor
。如何將動作處理轉發到Laravel控制器中的第二個動作?
處理這個問題的最佳方法是什麼?
其他框架中我會僞代碼與此類似:
class UserController extends Controller {
/** @url /user/{$slug} */
function actionSimpleUser($slug) {
if (!$this->viewHas('special')) {
$this->toView('special', false);
}
return $this->render('user', ['slug' => $slug]);
}
/** @url /special-user/{$slug} */
function actionSpecialUser($slug) {
$this->toView('special', true);
return $this->forwardAction('user/simpleUser', [$slug]);
}
}
我在想「forwa rding「,所以我可以分享他們之間的其他業務邏輯。在你的方法中分享代碼的最好方法是在兩個動作中調用受保護的方法,對吧? – igorsantos07
是或者你可以有一個參數決定用戶是否特殊的路由。所以你可以有'Route :: get('users/{type}/{slug}','UserController @ userProfile');'並且在控制器內部動作有2個變量:'public function userProfile($ type,$ slug)',然後在動作內部,例如可以檢查類型是「常規」還是「管理員」。編輯:也是的,你可以將邏輯抽象爲一個被這兩個動作調用的受保護的方法。這對於非常相似的創建/更新方法非常有用。 –