将数据传递到Laravel中的扩展视图和子视图

时间:2019-07-20 12:26:48

标签: laravel laravel-blade

起初,我只有一个视图文件,其中包含用于显示页面的所有代码。但是现在我决定拆分代码部分。 因此,据我了解,我将创建一个子视图,将我的段代码写入该文件,然后在Laravel Controller中返回该子视图。因此,现在传递的数据进入子视图,在父视图中,直到调用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')

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

2 个答案:

答案 0 :(得分:0)

您必须在路由中调用的函数中使用return view("subview", ["somedata" => $somedata])。像这样:

web.php

Route::get('your_endpoint', 'walletsController@yourFunction');

walletsController

class walletsController extends Controller
{
    public function yourFunction() {
        return view("subview", ["somedata" => $somedata]);
    }
}

答案 1 :(得分:0)

在这种情况下,我建议使用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