如何将动作处理转发给 Laravel 控制器中的第二个动作?
How to forward action processing to a second action in Laravel Controllers?
我有两个相似的用户配置文件,它们共享几乎相同的视图结构和信息。但是,"special user profile" 会显示一个额外的块,并且需要不同的 URL - 例如,/user/igor
和 /special-user/igor
.
处理此问题的最佳方法是什么?
在其他框架中,我会有类似这样的伪代码:
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]);
}
}
在 Laravel.
中,您可以通过多种方式实现这一点
你可以有 2 个路由进入 2 个控制器操作:
Route::get('/user/{slug}', 'UserController@userProfile');
Route::get('/special-user/{slug}', 'UserController@specialUserProfile');
然后在这些控制器操作中,您可以呈现相同的视图并设置一个标志以将其标记为特殊或非特殊:
public function userProfile($slug)
{
$user = User::where('slug', $slug)->first();
$special = false;
return view('users.show', compact('user', 'special');
}
public function specialUserProfile($slug)
{
$user = User::where('slug', $slug)->first();
$special = true;
return view('users.show', compact('user', 'special');
}
然后在视图文件中检查用户是否特殊:
@if($special === true)
// special user code block
@endif
我有两个相似的用户配置文件,它们共享几乎相同的视图结构和信息。但是,"special user profile" 会显示一个额外的块,并且需要不同的 URL - 例如,/user/igor
和 /special-user/igor
.
处理此问题的最佳方法是什么?
在其他框架中,我会有类似这样的伪代码:
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]);
}
}
在 Laravel.
中,您可以通过多种方式实现这一点你可以有 2 个路由进入 2 个控制器操作:
Route::get('/user/{slug}', 'UserController@userProfile');
Route::get('/special-user/{slug}', 'UserController@specialUserProfile');
然后在这些控制器操作中,您可以呈现相同的视图并设置一个标志以将其标记为特殊或非特殊:
public function userProfile($slug)
{
$user = User::where('slug', $slug)->first();
$special = false;
return view('users.show', compact('user', 'special');
}
public function specialUserProfile($slug)
{
$user = User::where('slug', $slug)->first();
$special = true;
return view('users.show', compact('user', 'special');
}
然后在视图文件中检查用户是否特殊:
@if($special === true)
// special user code block
@endif