Laravel以一种很好的方式使用多个控制器和View

时间:2014-04-09 07:07:54

标签: view laravel laravel-4 panel

我刚刚开始使用Laravel,所以请耐心等待。

我正在尝试使用left content pane以及middle content paneright content pane来制作某种CMS,你可能都知道......

这是描述我的目标的图像: enter image description here

我的问题是:我怎样才能以漂亮,美观的方式实现这一目标?我在路线文件中需要做什么以及我的控制器如何?

我已经按照Laracast的基本教程进行了操作,所以我知道基础知识,但这都是......

我真的希望有人可以帮助我(或指向正确的方向)。因为我想在开始时以正确的方式做到这一点,而不是在6个月之后......

1 个答案:

答案 0 :(得分: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>

菜单如何工作

  • 在您的app目录中创建一个新文件(与routes.php相同),并将其命名为composers.php

  • 打开app/start/global.php并在文件位置的末尾

    require app_path().'/composers.php';

    这样,每次通话都会触发composers.php文件中的代码。

  • 在composers.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将触发index

中的PostsController功能
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变量并将其放在主布局中。

我希望这会让你开始,我也希望我的代码中没有任何拼写错误!

并且不要忘记,如果是现成的模板,则必须

  1. 自己照顾资产管理(.css,.js等)

  2. 让您的代码符合模板样式表