我有两个类似的用户配置文件,它们共享几乎相同的视图结构和信息。但是,“特殊用户个人资料”会显示其他广告素材,并且需要不同的网址 - 例如/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]);
}
}
答案 0 :(得分:2)
您可以通过各种方式在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