【问题标题】:Passing data from controller to laravel nested view将数据从控制器传递到 laravel 嵌套视图
【发布时间】:2016-01-30 13:57:48
【问题描述】:

我在 Laravel 中有一个页面系统 - 我将数据从控制器传递到视图。

$this->data['title'] = $row->title;
$this->data['breadcrumb'] = $row->bc;

现在我通过如下方式:

return View::make('Themes.Page', $this->data);

在视图文件中,我访问数据如下:

{{$breadcrumb}}

我现在要做的是在嵌套视图中传递这些数据:

$this->layout->nest('content',$page, $this->data);

(Content 是视图中的 {{content}},它将被 $page 内容替换。我想像以前一样传递 $this->data 但现在我收到错误:

未定义变量面包屑。

注意:Laravel 4.2 版 $this->layout 在构造函数中设置为 模板文件(Themes.Page)

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    实际上您不需要将任何单独的数据传递给您的部分页面(面包屑)

    控制器页面

    $this->data['title'] = $row->title;
    $this->data['breadcrumb'] = $row->bc;
    
    return View::make('idea.show',array("data"=>$this->data));
    

    主视图页面

    <div>
    <h1>here you can print data passed from controller  {{$data['title']}}</h1>
    @include('partials.breadcrumb')
    </div>
    

    你的部分文件

    <div>
    <h1>here also you can print data passed from controller {{$data['title']}}</h1>
    <ul>
    <li>....<li>
    <li>....<li>
    </ul>
    </div>
    

    有关这方面的更多信息,您可以查看以下链接http://laravel-recipes.com/recipes/90/including-a-blade-template-within-another-template 或观看此视频https://laracasts.com/series/laravel-5-fundamentals/episodes/13

    【讨论】:

      【解决方案2】:

      你应该按如下方式传递数据

      return View::make('Themes.Page')->with(array(
                  'data'=>$this->data));
      

      或者(因为你只传递了 1 个变量)

      return View::make('Themes.Page')->with('data', $this->data);
      

      您还可以通过引用 $data 将其传递给嵌套视图

      【讨论】:

      • 谢谢。但我的问题是关于嵌套视图。
      • 是的,当您使用变量名称传递它时,您可以在所有嵌套视图中使用该名称。 Rameez 是如何解释的。
      【解决方案3】:
      $dataForNestedView = ['breadcrumb' => $row->bc];
      
      return View::make('Themes.Page', $this->data)->nest('content', 'page.content', $dataForNestedView);
      

      在 Themes.Page 视图中渲染嵌套视图:

      <div>
         {{ $content }} <!-- There will be nested view -->
      </div> 
      

      在嵌套的 page.content 视图中你可以调用:

      <div>
        {{ $breadcrumb }}
      </div>
      

      *div 标签只是为了更好的理解。

      【讨论】:

        【解决方案4】:

        好的,经过大量搜索,我发现我使用的 Laravel 4.2 版本存在错误。 Laravel 5 工作。 对于 laravel 4.2,更好的选择是使用 View::share('data',$objectarray) 传递数据对象数组,同时从控制器传递数据。

        感谢大家的帮助

        【讨论】:

          猜你喜欢
          • 2017-04-05
          • 1970-01-01
          • 2017-01-29
          • 2019-04-15
          • 2015-07-25
          • 2017-09-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多