【问题标题】:Sending variable from Controller to view through route从控制器发送变量以通过路由查看
【发布时间】:2021-04-22 21:12:05
【问题描述】:

我想将数据从登录控制器发送到 routes/web.php。

在我的 LoginController.php 中有

return redirect()
        ->intended('/dashboard')
        ->with([
            'name'=>'Joe Steel',
            'address'=>'Blk 4, Bryton street',
            'gender'=>'male',
            ]);//this is the data I want to send

在我的路线/web.php 我有

Route::get('/dashboard', function(){
        //from session
    $names = Session::get('name');//extract name from session
    $address = Session::get('address');//extract name from session
    
    return View::make('view/directory/dashboard', [
        'name'=>$names, 
        'address'=>$address]);
                    //load web view , 
                    //send name which would be displayed in 
                    //dashboard.blade.php {{$name}} and {{$address}}
});

在我的dashboard.blade.php 中有

{{$name}} and {{$address}}

这不会产生任何输出。即他们应该出现的位置是空的

当我不给 View::make() 任何变量标识符时,例如查看::make('dashboard',[$names,$address]) 它产生错误 未定义变量:名称(查看:/laravel/installed/directory.php)

所以我不知道 route/web.php 是否从控制器接收任何东西,我也对如何通过数组将它传递给视图感到困惑。

请问发生这种情况的原因是什么

更新

我注意到会话没有从我的控制器传递,我不知道这可能是什么原因。有什么我遗漏的吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您是直接访问路由/dashboard,还是在被引导后刷新页面?会话数据仅针对单个请求保留。因此,如果您的login 成功并被重定向到/dashboard,则数据将在session 中可用。如果您刷新页面或离开,则返回该数据将不再可用,因此不会显示。

    更新

    当您的user 成功通过身份验证后,您将您的user 重定向到/dashboard 路由,其中​​包含您使用with(...) 添加的nameaddress 数据。

    然后您从session 获取您的nameaddress 数据并将该数据传递到您的视图。 nameaddress 将在用户第一次访问 /dashboard 时在视图中可用,因为它是从您的 route 发送的,它从您的 session 获取数据。如果user 转到另一个页面(例如/dashboard/users)然后返回/dashboard,则nameaddress 数据将不可用,因此不会显示。要让nameaddressuser 转到另一个页面并再次返回时显示,您需要设置nameaddress 或只使用Auth::user()->name; 来获取名称经过身份验证的用户。

    【讨论】:

    • 谢谢,我有点困惑。请你能更清楚地说明它。请看更新!!!
    • @SMev 我在回答中添加了更多细节,希望能更好地解释我的意思。
    【解决方案2】:

    with() 方法接受键数组作为第一个值,将值本身作为第二个值,所以试试 用这样的方法链接,而不是一次调用它。

    return redirect()
        ->intended('/dashboard')
        ->with('name', 'Joe Steel')
        ->with('address', 'Blk 4, Bryton street')
        ->with('gender', 'male');
    

    请尝试为会话数据提取添加默认值。

    $names = Session::get('name', 'default name');//extract name from session
    $address = Session::get('address', 'default address');//extract name from session
    

    并使用相关的视图路径,而不是实际的 - 项目根目录。

    return view('directory.dashboard', [
        'name'=>$names, 
        'address'=>$address]);
    

    使用 .而不是 / in 来自您路径中的资源文件夹。

    另外,你可以像使用 Auth 外观

    Auth::user();
    

    在他登录后获取您的用户数据。

    【讨论】:

    • 将单个关联数组传递给with() 也是完全有效的语法; ->with(['one' => 'one', 'two' => 'two'])->with('one', 'one')->with('two', 'two') 会做同样的事情。
    猜你喜欢
    • 2018-04-19
    • 2017-06-02
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多