我有两个相似的用户个人资料,他们共享几乎相同的 View 结构和信息。然而,“特殊用户配置文件”将显示一个附加 block ,并需要不同的 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 个 Controller 操作:
Route::get('/user/{slug}', 'UserController@userProfile');
Route::get('/special-user/{slug}', 'UserController@specialUserProfile');
然后在这些 Controller 操作中,您可以渲染相同的 View 并设置一个标志以将其标记为特殊或非特殊:
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');
}
然后在 View 文件中检查用户是否特殊:
@if($special === true)
// special user code block
@endif
关于php - 如何将 Action 处理转发给 Laravel Controller 中的第二个 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312964/