【问题标题】:Can't pass data from controller to blade template laravel无法将数据从控制器传递到刀片模板 laravel
【发布时间】:2015-07-29 21:56:32
【问题描述】:

在我的页面控制器中,我有

$this->layout->content = View::make('authentication/login')->with('page_title','title');

我正在为我的模板使用刀片文件。在 html 的头部,我有

<title>{{$page_title}}</title>

我收到 $page_title 未定义的错误。

理想情况下,我想要的是$data=array('page_title'=&gt;'Login','second_item'=&gt;'value')...。但是由于我无法将变量的基本传递给视图工作,所以我首先坚持这一点。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    正如@Gravy 指出的那样,有很多方法可以实现这一点,但从她尝试编写代码的方式来看,解决方案是:

    $data = array();
    $this->layout->with('data', $data);
    $this->layout->content = View::make('home');
    

    在此处查看更多信息:http://forums.laravel.io/viewtopic.php?pid=58548#p58548

    【讨论】:

    • 这对我有用,谢谢。我尝试在_construct 方法中添加$this-&gt;layout-&gt;with($this-&gt;data); 行,所以我不必在每个控制器中声明它,但它返回错误-Call to a member function with() on a non-object。在单个控制器功能内部,它很好。你知道为什么它在构造函数中不把它看成一个对象吗?
    • 我认为您可以使用 View::share() 从构造函数将数据传递给视图。
    【解决方案2】:
    $data = 
    [
        'page_title' => 'Login',
        'second_item' => 'value'
        ...
    ];
    
    return View::make('authentication/login', $data);
    
    // or
    
    return View::make('authentication/login', compact('data'));
    
    // or
    
    return View::make('authentication/login')->with($data);
    
    // or
    
    return View::make('authentication/login')->with(['page_title' => 'Login', 'second_item' => 'value']);
    
    // or
    
    return View::make('authentication/login')->with(array('page_title' => 'Login', 'second_item' => 'value'));
    

    【讨论】:

    • return View::make('authentication/login')->with('data', $data);
    • 你可以这样做@kaning,但你需要从 $data 访问视图中的所有元素。例如{{ $data['page_title'] }}。执行我的第二个选项,您可以在视图 {{ $page_title }} 内执行此操作
    【解决方案3】:
    $data = array('page_title'=>'Login','second_item'=>'value');
    return View::make('authentication/login', $data);
    

    【讨论】:

      【解决方案4】:

      所以要让布局在控制器中工作,您需要首先在布局刀片模板中声明变量 content

      在您的控制器中执行您已经完成的操作,但在视图中使用目录结构时请记住点符号。 layouts.master 与 layouts/master.blade.php 相同。

      class UserController extends BaseController {
          /**
           * The layout that should be used for responses.
           */
          protected $layout = 'layouts.master';
      
          public function getIndex()
          {
              // Remember dot notation when building views
              $this->layout->content = View::make('authentication.login')
                                           ->with('page_title','title');
          }
      }
      

      layouts/master.blade.php

      <div class="content">
          {{-- This is the content variable used for the layout --}}
          {{ $content }}
      </div>
      

      身份验证/login.blade.php

      <title>{{ $page_title }}</title>
      

      如果你使用这个结构,这将起作用。

      【讨论】:

      • 我得到 $content 变量的回声很好。是 $page_title 没有回显。另外,为什么在文件夹之间使用点符号而不是“/”?
      猜你喜欢
      • 2019-04-13
      • 2017-09-03
      • 2016-06-25
      • 1970-01-01
      • 2017-12-07
      • 2018-10-13
      • 2020-09-18
      • 2017-07-27
      • 2017-07-31
      相关资源
      最近更新 更多