3

我正在 PHP laravel 框架中制作一个简单的网站,其中顶部导航链接是从数据库动态生成的。我在主控制器操作中生成 $pages 变量并传递给布局文件。我的代码如下:

 public function home()
{
    $pages = Page::all();
    return View::make('home')->with('pages', $pages);
}

public function login()
{
    return View::make('login');
}

但是当我尝试访问登录操作时,我得到错误变量 $pages not found 因为 $pages 变量正在布局文件中被访问。如何在控制器中的所有操作中共享相同的变量?

4

5 回答 5

6

我认为一个相当简单的方法是使用控制器的构造函数。有时能够从该控制器中查看控制器中所有方法可用的变量,而不是隐藏在某处的服务提供者中,这有时会很有帮助。

class MyController extends BaseController
{
    public function __construct()
    {
        view()->share('sharedVar', 'some value');
    }

    public function myTestAction()
    {
        view('view.name.here');
    }
}

在视图中:

<p>{{ $sharedVar }}</p>
于 2017-07-16T15:41:48.880 回答
2

您可以像下面这样使用单例

App::singleton('data', function() { return array('abc' => 1); });

这样,您可以在控制器或模板中的任何位置调用它,例如

$data = App::make('data');

在此之后,您可以尝试使用 Phil 在这里开发的包,https://github.com/Phil-F/Setting。安装后,您可以通过以下方式在控制器或模板中引用它

Setting::get('title')

当然,您可以在任何地方使用

Setting::set('title', 'Portfolio');

设置允许您将它们存储在缓存和 json 文件中,这可能是获取值的另一种方式。

于 2014-06-09T12:40:15.603 回答
1

我通过使用 Laravel 的视图作曲家解决了这个问题。我制作了一个 header.blade.php 并将 $pages 变量传递给它,并将以下代码添加到我的 routes.php 文件中。

View::composer('header', function($view){
   $pages = Page::all();
   $view->with('pages', $pages);
});   
于 2015-07-23T06:03:50.903 回答
0

您忘记在登录操作中添加参数。

public function login()
{
    $pages = Page::all();
    return View::make('login')->with('pages',$pages);
}

我的老回复:

要在控制器中的所有操作之间共享相同的变量,原始 PHP 应该可以帮助您:

<?php

Class MyController Extends BaseController {
    var $pages = Page::all();

     public function home()
    {
        return View::make('home')->with('pages', $this->pages);
    }

    public function login()
    {
        $pages = $this->pages;
        return View::make('login');
    }
}

但就个人而言,我更喜欢在模型中创建一个变量,例如:

<?php

Class Page extends Eloquent {

    public static $all_ages = Page::all();
}

并像这样访问它:

Page::$all_pages;
于 2013-09-10T14:57:36.420 回答
0

共享变量

应用程序/提供者/AppServiceProvider

# app/Providers/AppServiceProvider.php


public function boot()
{
   // add this
    view()->share('someKey', 'This is shared data');
}
于 2021-07-08T19:23:54.170 回答