php - 如何将 Action 处理转发给 Laravel Controller 中的第二个 Action ?

标签 php laravel routes laravel-5.1

我有两个相似的用户个人资料,他们共享几乎相同的 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/

相关文章:

php - 通过移动应用程序为二维码的值添加前缀

reactjs - React Native - Stack Navigator 检查从哪个屏幕打开了新面板

PHP explode 然后双循环

php - 如何更改此 html 用户表单上的日期格式

php - Laravel 5.1 获取 start_time 和 end_time 之间的行(两个不同的字段)

date - Laravel Eloquent Birthdays 查询仅根据日期和月份获取日期列

python - 如何在python中生成具有两个节点之间的长最短路径的有向无环图

javascript - Angularjs 和 yeoman 的当前位置

php - Laravel 模型转换无法正常工作

php - 将 SQL 查询更改为 Eloquent 查询