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

Posted

技术标签:

【中文标题】Laravel 4.* 到 5.*,在 Controller 中嵌套视图【英文标题】:Laravel 4.* to 5.*, nesting views in Controller 【发布时间】:2017-07-27 01:46:02 【问题描述】:

截至目前,我已将 Laravel 运行环境更新为最新版本。回到 Laravel 4.*,我能够执行以下操作:

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

但现在看来,它失败了。我浏览了很多帖子,尝试了所有看似合理的方法,但我想出的绝对没有适合我的情况。可以在这篇文章的底部找到尝试努力的链接。下面是我要开始工作的代码。

我收到的错误范围来自“找不到类 'App\Http\Controllers\View'” - 当我将 use 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】:

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

首先,如果您想在布局中渲染视图,您通常会使用@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');

【讨论】:

我正在使用视图功能,在工作版本中,所以这不是问题。帖子中提到的是使功能像以前一样工作的旧方法和经过尝试的方法。至于主文件,以前是通过控制器完成的,现在完全是通过刀片界面完成的……? Welp,通过刀片脚本完成这一切似乎可以解决问题,尽管这是我希望解决的问题并且只更改控制器......哦,好吧。 +1 给你! 嗯,这是记录在案的方式。显然刀片最终会编译为 PHP,因此您可以查看源代码并查看是否可以通过控制器中的 View 对象来代替。

以上是关于Laravel 4.* 到 5.*,在 Controller 中嵌套视图的主要内容,如果未能解决你的问题,请参考以下文章

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

从 Laravel 5.7.4 升级到 Laravel 8 的危险

在 laravel 5.4 自动重定向到 404 页面

将 Laravel 5.4 升级到最新版本 (5.7)

升级到 laravel 5.4 后调用未定义的方法

更新到 Laravel 5.4 时出错