如何将操作处理转发到Laravel控制器中的第二个操作?

时间:2015-10-23 23:42:37

标签: php laravel routing laravel-5.1

我有两个类似的用户配置文件,它们共享几乎相同的视图结构和信息。但是,“特殊用户个人资料”会显示其他广告素材,并且需要不同的网址 - 例如/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]);
    }
}

1 个答案:

答案 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