本章来学习laravel的路由

一个简单的路由列子

Route::get('/', function()
{
    return 'Hello World';
});

路由的写法和Node的风格很相似。上面的路由直接返回ContentResult 这样容易理解一些。

再看一个复杂的Route的

Route::filter('old', function()//这是一个filter
{
    if (Input::get('age') < 200)
    {
        return Redirect::to('home');
    }
});

Route::get('user/profile',        array(
      'as' => 'profile',//路由名字
      'before' => 'auth|old',//多个filter       'uses' => 'UserController@showProfile'));//controller 和action

更多理由信息 http://v4.golaravel.com/docs/4.1/routing

接下来是Controller,Laravel框架里的controller在App/controllers文件夹下面。

所有的Controller都是继承basecontroller。

laravel的控制器和asp.net mvc也有很多类似的地方

比方说 Controller Filters.上面的路由已经用到了。

还是看代码,完整的route.php代码

<?php

/* 模型绑定 */
Route::model('post', 'Post');
Route::model('comment', 'Comment');

/* 匿名用户可以访问的路由 */
Route::get('/post/{post}/show', ['as' => 'post.show', 'uses' => 'PostController@showPost']);
Route::post('/post/{post}/comment', ['as' => 'comment.new', 'uses' => 'CommentController@newComment']);

/* 管理群组路由需要认证 */
Route::group(['prefix' => 'admin', 'before' => 'auth'], function () {
    /*get routes
    Route::get('/', ['use'=>'PostController@showIndex']);
    */

    Route::get('/', function () {
        $layout = View::make('shared.layout');
        $layout->title = 'DashBoard';
        $username = Auth::user()->username;
        $layout->main = View::make('post.index');
        return $layout;
    });

    Route::get('/post/list', ['as' => 'post.list', 'uses' => 'PostController@listPost']);
    Route::get('/post/new', ['as' => 'post.new', 'uses' => 'PostController@newPost']);

    /* 模型绑定 */
    Route::get('/post/{post}/edit', ['as' => 'post.edit', 'uses' => 'PostController@editPost']);
    Route::get('/post/{post}/delete', ['as' => 'post.delete', 'uses' => 'PostController@deletePost']);

    Route::get('/comment/list', ['as' => 'comment.list', 'uses' => 'CommentController@listComment']);

    /* 模型绑定 */
    Route::get('/comment/{comment}/show', ['as' => 'comment.show', 'uses' => 'CommentController@showComment']);
    Route::get('/comment/{comment}/delete', ['as' => 'comment.delete', 'uses' => 'CommentController@deleteComment']);

    /*post routes*/
    Route::post('/post/save', ['as' => 'post.save', 'uses' => 'PostController@savePost']);
    Route::post('/post/{post}/update', ['as' => 'post.update', 'uses' => 'PostController@updatePost']);
    Route::post('/comment/{comment}/update', ['as' => 'comment.update', 'uses' => 'CommentController@updateComment']);

});

/* RESTful Controllers 理由处理一系列的路由有点类似于ASP.net MVC 的通配路由 */
Route::controller('/', 'BlogController');

/* 视图合成器 */
View::composer('shared.sidebar', function ($view) {
    $view->recentPosts = Post::orderBy('id', 'desc')->take(5)->get();
});

  

从 Route::controller的 BlogController 来分析:
<?php

class BlogController extends BaseController
{

    public function __construct()
    {
        //updated: prevents re-login.
         //$this->beforeFilter('guest', ['only' => ['getLogin']]);//这里游客的权限注释掉了,有和没有是一样的
        $this->beforeFilter('auth', ['only' => ['getLogout']]);//设置只有logout需要有认证的权限
    }

    public function getIndex()
    {
        $posts = Post::orderBy('id', 'desc')->paginate(10);

        $this->layout->title = 'Home Page | Laravel 4 Blog';     //这里初学者可能有点难理解,这里和laravel的view 相关     //这里layout模板在basecontroller中指定了布局页,布局页中有一个main的子视图,这里是把blog文件夹下home的模版合并index模板并传入参数$posts     //至于compact方法可以查看php相关文档。
        $this->layout->main = View::make('blog.home')->nest('content', 'blog.index', compact('posts'));
    }

    public function getLogin()
    {
        $this->layout->title = 'login';
        $this->layout->main = View::make('blog.login');
    }

    public function postLogin()
    {
        $credentials = [
            'username' => Input::get('username'),
            'password' => Input::get('password')
        ];
        $rules = [
            'username' => 'required',
            'password' => 'required'
        ];
        $validator = Validator::make($credentials, $rules);
        if ($validator->passes()) {
            if (Auth::attempt($credentials))
                return Redirect::to('admin/');
            return Redirect::back()->withInput()->with('failure', 'username or password is invalid!');
        } else {
            return Redirect::back()->withErrors($validator)->withInput();
        }
    }

    public function getLogout()
    {
        Auth::logout();
        return Redirect::to('/');
    }

}

这一章如果详细写的话需要写的内容太多了,代码不一一贴出来了,在下一章 我把完整代码贴出来

.net转php laraval框架学习系列(三)项目实战---Route&Controllers的更多相关文章

  1. .net转php laraval框架学习系列(二)项目实战---Models

    上一篇已经介绍开发环境的搭建,如果有问题可以在文章后留言. 这篇将从项目实战开发,一步一步了解laravel框架. 在开发mvc项目时,models都是第一步. 下面就从建模开始. 实体关系图 由于不 ...

  2. .net转php laraval框架学习系列(一) 环境搭建

    之前也没写过什么博客,可能文章结构比较混乱,想到那写到哪. 主要是把自己学习中的经验写下来. 为什么选择laravel框架,是因为laravel框架目前是Php最流行的框架,深入研究后发现和asp.n ...

  3. .net转php laraval框架学习系列(四) 项目实战---View

    laravel的参考文档中view的讲解有些简单. 在实际项目开发中view的灵活性其实是非常大. 首先来看看laravel中的布局页 和asp.net mvc中有什么不同 <!DOCTYPE ...

  4. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

  5. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  6. scrapy爬虫学习系列三:scrapy部署到scrapyhub上

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  7. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  8. RabbitMQ学习系列三-C#代码接收处理消息

    RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...

  9. .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能

    原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能         接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...

随机推荐

  1. IE中对于stylesheet的个数限制

    对于IE6-9: 1.样式规则最多只能有4095个,多于这个数目的会被忽略: 2.样式表(通过@import, <link> 或 <style>)最多可以有31个(总和),多于 ...

  2. Android应用资源的分类和存储

    Android应用资源可以分为两大类1.无法直接访问的原生资源,保存在asset目录下2.可通过R资源清单类访问的资源,保存在res目录下 Android应用资源的存储/res/anim:存放定义补间 ...

  3. Altium Designer如何批量修改名称,数值,封装

    方法一: altium里的封装管理库 1,Tools -> Footprint Manager -> ...2,在Component List里选择要改的器件3,在View and Edi ...

  4. cf500D New Year Santa Network

    D. New Year Santa Network time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  5. EA强大的画图工具---设计数据库表格

    http://blog.csdn.net/senior_lee/article/details/30272169?utm_source=tuicool 关于EA这个优秀的软件是从师哥哪里听来的,自己瞎 ...

  6. gcc编译时头文件库文件搜索顺序(转)

    原文: http://blog.csdn.net/silentfly1987/article/details/6119195

  7. HDU_2012——判断表达式是否都为素数

    Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数.   I ...

  8. 简单Mysql思维导图

  9. [深入React] 2.综述

    在开始本教程前,请先查看官方示例:https://github.com/facebook/react/archive/master.zip 里的 examples 目录. 学习react是一个循序渐进 ...

  10. MySQL添加外键的方法

    为book表添加外键: <1>明确指定外键的名称: 语法:alter table 表名 add constraint 外键的名称 foreign key(你的外键字段名) REFERENC ...