【问题标题】:Passing data to both extended and sub view in Laravel将数据传递给 Laravel 中的扩展视图和子视图
【发布时间】:2019-11-29 04:07:45
【问题描述】:

起初,我只有一个视图文件,其中包含用于显示页面的所有代码。但现在我决定拆分代码部分。 因此,据我所知,我将创建一个子视图,将我的部分代码写入该文件,然后在 Laravel 控制器中返回子视图。所以现在传递的数据进入子视图和父视图,直到我调用yield 函数,我才能访问它们。但在父视图中,我需要一些数据才能调用yield。那么如何传递在父视图和子视图中都可用的数据?

我已经尝试将extends() 中的数据作为第二个参数传递,但是这种方式 当我拨打yield时,数据将可用。

控制器:

class walletsController extends Controller
{

function name(){
    return view("subview", ["somedata" => $somedata])
}

}

子视图刀片文件:

@extends('parentview',["somedata" => $somedata] )
@section('wallet')
// some codes here
@endsection

parentview 刀片文件:

// some codes
@yield('wallet')

当我在调用yield 之前尝试使用在extends() 中传递的数据时,它给了我一个垃圾值。

【问题讨论】:

    标签: laravel laravel-blade


    【解决方案1】:

    在这种情况下,我建议使用 Laravel 的 View Composers

    View Composers 允许您将变量传递给您想要的任何视图(id 无关紧要,它是父视图还是子视图)。

    在您的情况下,您将传递一个仅用于parentview 的变量,对吧? AppServiceProvider 中的代码(boot() 方法)是这样的:

     view()->composer(['parentview', 'folder.another-view-that-you-want'], function ($view) {
                 $someVar = 'some var value';
                 $view->with(['someVar' => $someVar]);
    });
    

    您还可以使用* 将变量传递给每个视图:

     view()->composer('*', function ($view) {
                 $someVar = 'some var value';
                 $view->with(['someVar' => $someVar]);
    });
    

    当然,您可以在文档中进一步阅读:https://laravel.com/docs/5.8/views#view-composers

    【讨论】:

    • 但是我的数据是在控制器中创建的,视图编辑器如何知道我的数据在哪里?
    • 是很具体的数据,不能放在更广的范围内吗?如果是这样,请不要考虑 View Composer 方法。否则,您应该考虑提取生成此数据的逻辑并重用它。另外,看看这个 SO 问题:stackoverflow.com/questions/44052424/… - 这可能会有所帮助。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2016-04-12
    相关资源
    最近更新 更多