因此,我在主页中有一个导航栏,其中列出了数据库中的所有模块名称。我决定使用blade's
@yeild()
功能,而不是重写整个代码以在所有页面中列出模块名称。
这是我的主页控制器,我在这里获取所有模块名称并将其传递给主页视图,如下所示
public function index()
{
$data = Module::get();
return view("BaseView.home")->with('data',$data);
}
这是我的主页视图,我在导航栏中显示所有模块及其各自的名称,如下所示
<ul class="navbar-nav">
@foreach($data as $modules)
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ $modules->module_name) }}<i class="plusMinus" aria-hidden="true"></i>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
@foreach($modules->module_categories as $category)
<?php
$getModuleNameToLowerCase = strtolower($modules->module_name);
$getCategoryNameToLowerCase = preg_replace('/\s+/', '_', strtolower($category->categories_name));
?>
<a class="dropdown-item" href="#">{{ $category->categories_name }}</a>
@endforeach
</div>
</li>
@endforeach
</ul>
<div class="container-fluid">
@yield('mainBody')
</div>
现在,当我在另一个视图中使用extend
时,如下所示
@extends('BaseView.home')
我得到了Undefined variable: data
。
有人能帮我/指导我如何解决这个问题吗?
发布于 2017-04-03 23:03:03
在您的控制器中,您需要将模块传递给每个视图,因为在新请求之后,视图不会保留这些值。对于每个请求,必须有模块($data)。
请记住,使用一个controller method
传递给master blade
的数据将不适用于另一个controller method
,因为每次新请求都需要在主刀片和子刀片中使用这些变量的所有值。
控制器
//..............
//.................
public function index()
{
$data['modules'] = Module::get();
//$data['other_data'] = User::get(); //To get other data and pass to your view
return view("BaseView.home")->with('data',$data);
}
public function profilePage()
{
$data['modules'] = Module::get();
//$data['profile_detail'] = Profile::get(); //To get other data and pass to your view
return view("BaseView.home")->with('data',$data);
}
//Something like this
但是为每个控制器方法编写$data['modules'] = Module::get();
时,您可以在控制器的构造函数中编写它。这将适用于所有方法(请求)。
public function __construct(){
$data['modules'] = Module::get();
}
public function index()
{
//$data['other_data'] = User::get(); //To get other data and pass to your view
return view("BaseView.home")->with('data',$data);
}
//................
//.................
和视图:
<ul class="navbar-nav">
<?php
if(isset($data['modules'])&&count($data['modules'])>0){
?>
@foreach($data['modules'] as $modules)
.............
..............
@endforeach
<?php
}
else{
echo "Modules are not available";
}
?>
</ul>
<div class="container-fluid">
@yield('mainBody')
</div>
上面是针对您的错误消息的,但是如果您希望这些模块在任何地方都可用,那么您可以使用session
或creating helper
发布于 2017-04-04 19:07:55
不是在每个视图上传递数据,而是使用提供者引导方法,该方法在加载任何视图之前触发,并在每个视图上传递默认数据。很简单。
https://stackoverflow.com/questions/43187693
复制相似问题