Laravel 以一种很好的方式使用多个控制器和视图
Posted
技术标签:
【中文标题】Laravel 以一种很好的方式使用多个控制器和视图【英文标题】:Laravel using multiple Controllers and View in an nice way 【发布时间】:2014-04-09 07:07:53 【问题描述】:我刚开始使用 Laravel,所以请耐心等待。
我正在尝试使用left content pane
和middle content pane
和right content pane
制作某种CMS,你们可能都知道...
这是描述我的目标的图片:
我的问题是:我怎样才能以漂亮、好看的方式实现这一目标?我必须在路由文件中做什么以及我的控制器看起来如何?
我已经学习了Laracast 的基本教程,所以我知道基础知识,但仅此而已......
我真的希望有人可以帮助我(或指出正确的方向)。因为我想在一开始就以正确的方式去做,而不是在 6 个月之后......
【问题讨论】:
对于侧窗格,使用composer
,然后包含在布局中。将为您省去很多麻烦。
@itachi,好吗?!?我认为composer只是一个依赖库,你可以很容易地安装一些包。你的意思是我应该通过composer安装一个包吗?还是我没看懂?
itachi 的意思是 laravel 的视图作曲家laravel.com/docs/responses#view-composers。阅读后,如果您有任何问题,请回来告诉您希望如何控制渲染或不控制这些侧窗格?
【参考方案1】:
首先,您必须找到一个模板或自己创建一个。我将假设您将使用 Bootstrap,因此请查看 this link 以获得一个不错的仪表板模板。如果你用谷歌搜索,你可以找到更多(免费或付费)。所以你终于找到了你的模板!下一步你要怎么做?我会告诉你我的方法。
打开您下载的模板并剥离所有内容而不触及位置。例如,在模板中,主菜单可能会放置在一个 div 中,例如:
<div class="left-side">
<ul class="menu">
<li>...</li>
<li>...</li>
</ul>
</div>
去掉<ul>
,只留下<div>
。您将在那里放置您的菜单(稍后您将看到如何)。
在所有位置都这样做之后,你会得到这样的结果:
<div>
<div class="left-side"></div>
<div class="main-content"></div>
</div>
当然,它会远不止这些,但你明白了。这是您的主布局。在您的视图中创建一个文件夹,例如layouts
并将其保存为master.blade.php
。
现在再次打开并更改为:
<div>
<div class="left-side">@include('partials.menu')</div>
<div class="main-content">@yield('content')</div>
</div>
菜单的工作原理
在你的应用目录中创建一个新文件(与routes.php同级)并命名为composers.php
打开app/start/global.php
并放在文件末尾
require app_path().'/composers.php';
这样composers.php
文件中的代码将在每次调用中触发。
在composer.php里面写如下代码:
在您的视图文件夹中创建一个文件夹View::composer('layouts.master', function($view) // Just a sample. Get all menu items from the database $menus = Menu::all() ; // This way $menus will always be available in your master.blade.php $view->with('menus', $menus); );
partials
,并在该文件夹中创建menu.blade.php
。现在打开menu.blade.php
并输入以下代码:
<ul>
@foreach($menus as $menu) <li> $menu->title </li> @endforeach
</ul>
你的菜单准备好了!
当然,您将需要实现更多逻辑,例如菜单突出显示等,但这将帮助您入门。
主要内容的运作方式
要让您的内容出现在主区域中,您的所有视图都必须扩展主布局。假设您有以下路线:
Route::resource('posts', 'PostsController');
调用例如h**p://www.example.com/posts 会触发PostsController
中的index
函数
class PostsController extends BaseController
public function index()
$posts = Post::all();
return View::make('posts.index', compact('posts'));
然后它将调用views/posts/index.blade.php
文件
@extends('layouts.master')
@section('content')
@foreach($posts as $post)
<p> $post->content</p>
@endforeach
@stop
将 $menus 变量传递给它并将其放在主布局中。
我希望这能让你开始,我也希望我的代码中没有任何拼写错误!
并且不要忘记,如果有现成的模板,则必须
自己负责资产管理(.css、.js 等)
让您的代码符合模板样式表
【讨论】:
谢谢你的回答,这似乎是我一直在寻找的答案,但是......我收到错误View [partials.menu] not found.
但我有文件menu.blade.php
在里面app/views/partails
文件夹所以文件在那里但找不到它?即使我删除了.blade
扩展名,也会引发错误......你知道可能是什么问题吗?
这app/views/partails
只是一个错字吗?
哇,这确实是一个错字。非常感谢你。它现在正在工作!以上是关于Laravel 以一种很好的方式使用多个控制器和视图的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin:如何将两个语句“应用”和“让”以一种很好的方式放在一起?