Laravel 4. *到5. *,在Controller中嵌套视图

时间:2017-03-07 00:58:16

标签: php laravel blade

我已将Laravel运行环境更新到截至此日期的最新版本。回到Laravel 4. *,我能够做到这样的事情:

$this->layout->content = View::Make('users.login');

但现在看来,失败了。我已经经历了很多帖子,尝试了一切看似合理的事情,而且我提出的绝对没有任何对我的案子有用的东西。可以在本文的底部找到尝试过的努力的链接。下面是我试图开始工作的代码。

我收到的错误来自" Class' App \ Http \ Controllers \ View'找不到" - 当我向控制器添加使用View时解决了这个问题,但这会导致另一个错误。我收到的另一个错误是"尝试分配非对象的属性"当我添加使用View;位。

基本理念是:

我有两个视图,一个是基本页面布局(layouts.main),另一个包含我希望嵌入到我的主布局(user.login)中的用户登录。它们都是刀片格式文件,如果我尝试它们,它们彼此独立地加载,我根本无法将两个文件嵌套在控制器下面。我尝试这样做,以便主文件可以就是这样,只有这个内容部分在页面视图之间发生变化。

控制器功能:

public function getLogin() {
     $this->layout->content = View::Make('users.login');
}

刀片文件部分:

    <div class="content roundBorder wrapper">
        @yield($content)
    </div>

尝试的解决方案: 任何使用View :: make的东西似乎因弃用而失败(?) 恩。 https://laravel.io/forum/03-19-2014-simply-loading-multiple-views

尝试Laravel 4: Nest view inside layout with data,但

return $layout->nest('content','user.login');

每次都失败。

Laravel define default layout from controller in good way没有用,所以我认为它也被弃用了。

How to include a sub-view in Blade templates?无法工作,因为我希望动态地执行此操作

当我尝试以下内容时,

https://laracasts.com/discuss/channels/general-discussion/laravel-5-this-layout-content-not-working?page=1对我无效:

$content = view('user.login');    
return view($this->layout, ['content' => $content]);

1 个答案:

答案 0 :(得分:4)

好的,有几件事你做错了。

首先,如果要在布局中呈现视图,通常会使用@extends Blade指令。见https://laravel.com/docs/5.4/blade#template-inheritance

layouts/main.blade.php文件中:

@yield('body')

users/login.blade.php文件中:

@extends('layouts.main')

@section('body')
    <!-- your markup -->
@stop

最后,要在Laravel控制器中渲染视图,可以使用view()辅助函数。

public function getLogin()
{
    return view('users.login');
}