首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用刀片查看所有页面的导航栏Laravel 5

使用刀片查看所有页面的导航栏Laravel 5
EN

Stack Overflow用户
提问于 2017-04-03 22:46:23
回答 2查看 2.1K关注 0票数 1

因此,我在主页中有一个导航栏,其中列出了数据库中的所有模块名称。我决定使用blade's @yeild()功能,而不是重写整个代码以在所有页面中列出模块名称。

这是我的主页控制器,我在这里获取所有模块名称并将其传递给主页视图,如下所示

代码语言:javascript
运行
复制
public function index()
    {
        $data = Module::get();

        return view("BaseView.home")->with('data',$data);
    }

这是我的主页视图,我在导航栏中显示所有模块及其各自的名称,如下所示

代码语言:javascript
运行
复制
<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时,如下所示

代码语言:javascript
运行
复制
@extends('BaseView.home')

我得到了Undefined variable: data

有人能帮我/指导我如何解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2017-04-03 23:03:03

在您的控制器中,您需要将模块传递给每个视图,因为在新请求之后,视图不会保留这些值。对于每个请求,必须有模块($data)。

请记住,使用一个controller method传递给master blade的数据将不适用于另一个controller method,因为每次新请求都需要在主刀片和子刀片中使用这些变量的所有值。

控制器

代码语言:javascript
运行
复制
//..............
//................. 
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();时,您可以在控制器的构造函数中编写它。这将适用于所有方法(请求)。

代码语言:javascript
运行
复制
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);
}

//................
//.................

和视图:

代码语言:javascript
运行
复制
<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>

上面是针对您的错误消息的,但是如果您希望这些模块在任何地方都可用,那么您可以使用sessioncreating helper

票数 0
EN

Stack Overflow用户

发布于 2017-04-04 19:07:55

不是在每个视图上传递数据,而是使用提供者引导方法,该方法在加载任何视图之前触发,并在每个视图上传递默认数据。很简单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43187693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档