您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Laravel 4 初级教程之视图、命名空间、路由

2025/3/19 18:36:09发布74次查看
本文是laravel 4初级教程的第二篇,学习进入深水区,我在本篇教程中将重点讲解视图常用规则,命名空间(重难点),和路由(难点)。
1. 视图分离与嵌套
在 learnlaravel 文件夹下运行命令:
php artisan generate:view admin._layouts.default这时候generator插件帮我们创建了app/views/admin/_layouts/default.blade.php 文件,将内容修改为:
learn laravel 4
  @include('admin._partials.assets')
learn laravel 4
      @include('admin._partials.navigation')
@yield('main')
这就是视图文件,mvc中的v。视图需要仔细讲一下。
views文件夹为视图文件夹,视图文件夹可以嵌套,就像我上面一样创建了admin/_layout嵌套文件夹,在里面创建了一个叫default.blade.php的文件,那么以后我们在laravel内任何地方要用到这个视图的时候,他就叫admin._layouts.default。
我们看到,上面代码的第七行是“@include('admin._partials.assets')”,根据上面我们刚刚了解的知识,这表示载入了另外一个文件。blade是laravel的模板引擎,此处的 @include 表示直接把那个文件的所有代码带入进来放到这里,变成当前视图的一部分。
注意看第25行“@yield('main')”,这表示什么呢?这个有点复杂,我们稍后再讲。
2. 权限验证
laravel支持标准http认证,但是在此处我们需要构建blog系统,所以我们将编写完善的管理员登陆系统,从页面登录。
用命令行创建app/views/admin/auth/login.blade.php文件,代码如下:
@extends('admin._layouts.default')
@section('main')
{{ form::open() }}
      @if ($errors->has('login'))
        {{ $errors->first('login', ':message') }}
@endif
{{ form::label('email', 'email') }}
{{ form::text('email') }}
{{ form::label('password', 'password') }}
{{ form::password('password') }}
{{ form::submit('login', array('class' => 'btn btn-inverse btn-login')) }}
{{ form::close() }}
@stop大家应该注意到了前两行:
@extends('admin._layouts.default')@section('main')这代表什么?实际上,以后我们会了解到,在controller中调用view的时候,调用的只是这个login.blade.php文件,第一行表示,此视图是admin._layouts.default的子视图,这时blade引擎会把这个视图也载入进来,怎么组装呢?这时候下面那个@section('main')就该出场了,被它包裹的代码将会直接放到admin._layouts.default中的@yield('main')中。section和yield可以任意搭配,只要两个视图之间有调用关系,他们就可以这样用,非常灵活。
写到这里大家可能有个疑问,为什么示例代码里空行那么多?这一点就是个人经验了。blade引擎的所有标签都会在视图编译时用正则处理,引擎本身有一个问题,算不上bug,就是换行符会被处理掉,导致前后行和这一行都紧紧地挤在一起,在前端浏览器中“查看源代码”时,比较不清晰,前后加上空行可以解决这个问题。当然这可能是一个自动的“压缩”特性,不再深入讨论。
增加控制器文件app/controllers/admin/authcontroller.php,这时候有人就说了,这我知道,哈哈,运行
“php artisan generate:controller admin.authcontroller”
这个想法是对的,但你运行一下试试?会直接在app/controllers目录下创建一个“admin.authcontroller.php”文件,有人又说,那我用“admin/authcontroller”总行了吧,你试一下?也不行。所以我们要先在app/controllers 下手动创建 admin 文件夹,这时候,再命令行输入:
php artisan generate:controller admin/authcontroller这样就可以了。接下来改写authcontroller.php 的内容为:
namespace app\controllers\admin;
use auth, basecontroller, form, input, redirect, sentry, view;
class authcontroller extends basecontroller {
  /**
   * 显示登录页面
   * @return view
   */
  public function getlogin()
  {
    return view::make('admin.auth.login');
  }
  /**
   * post 登录验证
   * @return redirect
   */
  public function postlogin()
  {
    $credentials = array(
      'email'    => input::get('email'),
      'password' => input::get('password')
    );
    try
    {
      $user = sentry::authenticate($credentials, false);
      if ($user)
      {
        return redirect::route('admin.pages.index');
      }
    }
    catch(\exception $e)
    {
      return redirect::route('admin.login')->witherrors(array('login' => $e->getmessage()));
    }
  }
  /**
   * 注销
   * @return redirect
   */
  public function getlogout()
  {
    sentry::logout();
    return redirect::route('admin.login');
  }
}
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product