【问题标题】:Laravel 4.* to 5.*, nesting views in ControllerLaravel 4.* 到 5.*,在 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]);

【问题讨论】:

    标签: php laravel blade


    【解决方案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 对象来代替。
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 2013-07-07
    • 2015-01-31
    • 2014-05-17
    • 2013-02-14
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多