起初,我只有一个视图文件,其中包含用于显示页面的所有代码。但是现在我决定拆分代码部分。
因此,据我了解,我将创建一个子视图,将我的段代码写入该文件,然后在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
中传递的数据时,会给我一个垃圾值。
答案 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