.net转php laraval框架学习系列(三)项目实战---Route&Controllers

本章来学习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‘ => ‘[email protected]‘));//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‘ => ‘[email protected]‘]);
Route::post(‘/post/{post}/comment‘, [‘as‘ => ‘comment.new‘, ‘uses‘ => ‘[email protected]‘]);

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

    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‘ => ‘[email protected]‘]);
    Route::get(‘/post/new‘, [‘as‘ => ‘post.new‘, ‘uses‘ => ‘[email protected]‘]);

    /* 模型绑定 */
    Route::get(‘/post/{post}/edit‘, [‘as‘ => ‘post.edit‘, ‘uses‘ => ‘[email protected]‘]);
    Route::get(‘/post/{post}/delete‘, [‘as‘ => ‘post.delete‘, ‘uses‘ => ‘[email protected]‘]);

    Route::get(‘/comment/list‘, [‘as‘ => ‘comment.list‘, ‘uses‘ => ‘[email protected]‘]);

    /* 模型绑定 */
    Route::get(‘/comment/{comment}/show‘, [‘as‘ => ‘comment.show‘, ‘uses‘ => ‘[email protected]‘]);
    Route::get(‘/comment/{comment}/delete‘, [‘as‘ => ‘comment.delete‘, ‘uses‘ => ‘[email protected]‘]);

    /*post routes*/
    Route::post(‘/post/save‘, [‘as‘ => ‘post.save‘, ‘uses‘ => ‘[email protected]‘]);
    Route::post(‘/post/{post}/update‘, [‘as‘ => ‘post.update‘, ‘uses‘ => ‘[email protected]‘]);
    Route::post(‘/comment/{comment}/update‘, [‘as‘ => ‘comment.update‘, ‘uses‘ => ‘[email protected]‘]);

});

/* 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(‘/‘);
    }

}

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

时间: 2024-10-09 07:18:17

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

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

上一篇已经介绍开发环境的搭建,如果有问题可以在文章后留言. 这篇将从项目实战开发,一步一步了解laravel框架. 在开发mvc项目时,models都是第一步. 下面就从建模开始. 1.实体关系图, 由于不知道php有什么好的建模工具,这里我用的vs ado.net实体模型数据建模 下面开始laravel编码,编码之前首先得配置数据库连接,在app/config/database.php文件 'mysql' => array( 'driver' => 'mysql', 'read' =>

.net转php laraval框架学习系列

之前也没写过什么博客,可能文章结构比较混乱,想到那写到哪. 主要是把自己学习中的经验写下来. 为什么选择laravel框架,是因为laravel框架目前是Php最流行的框架,深入研究后发现和asp.net mvc框架在功能上基本上是伯仲之间.只是各自的实现方法不同. php在windows下的开发环境搭建 1.下载php地址 http://windows.php.net/download/ 注意相关版本,我的服务器用的iis7.5 32 系统 VC11 x86 Non Thread Safe (

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

laravel的参考文档中view的讲解有些简单. 在实际项目开发中view的灵活性其实是非常大. 首先来看看laravel中的布局页 和asp.net mvc中有什么不同 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!--这里相当于asp.net mvc 中的一个@section('title',false)--> @section('title') <t

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

spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学到spring框架这才知道单元测试原来是这么回事儿. 下面以上一篇文章中set注入的第一个实例为测试对象.进行单元测试. 1,拷贝jar包 junit-3.8.2.jar(4.x主要增加注解应用) 2,写业务类 [java] view plaincopyprint? public class Use

web前端Vue+Django&#160;rest&#160;framework&#160;框架&#160;生鲜电商项目实战视频教程 学习

web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 1.drf前期准备 1.django-rest-framework官方文档 https://www.django-rest-framework.org/ #直接百度找到的djangorestframework的官网是打不开的 2.安装依赖包 如图所示,django restframework的依赖模块,除了coreapi和django-guardian,已经在前面安装过了. 打开终端,执行安装命令

Identity Server4学习系列三

1.简介 在Identity Server4学习系列一和Identity Server4学习系列二之令牌(Token)的概念的基础上,了解了Identity Server4的由来,以及令牌的相关知识,本文开始实战,实现Identity Server4基本的功能. 2.前提 本文基于.Net Core2.1和Indetity Server4 2.3.0,令牌处理包采用IdentityServer4.AccessTokenValidation 2.7.0 3.实战一Identity Server4服

C# Redis学习系列三:Redis配置主从

Redis配置主从 主IP :端口      192.168.0.103 6666 从IP:端口       192.168.0.108 3333 配置从库 (1)安装服务: redis-server --service-install --service-name redisService6666 --port 6666 (2)启动进程: redis-server --service-start --service-name redisService6666 (3)连接redis:redis-

java框架学习系列

这篇文章的目的主要是作为一个框架学习的索引,方便查找及顺序学习 一.struts2学习 1. java之struts框架入门教程 2. java之struts2的执行流程讲解 3. java之struts2的配置讲解 4. java之struts2的action的创建方式 5. java之struts2的数据处理 6. java之struts2的action优化配置 7. java之struts2的ThreadLocal和ActionContext 8. java之struts2之Servlet

ABP架构学习系列三:手工搭建ABP框架

由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC.AOP.ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么多时间让人去慢慢研究.很久之前想手动搭建这个框架了,但是各种理由,你懂的.但是要在技术上得到大的提升就得静的下心去研究,学到大神的思想和精髓,运用到实际中去,才能去体验更开阔的天地. 本文以创建博客为思路,一步步构建整个项目,在摸索中进步,也希望能够帮助到有需要的人. 一.基础架构 第一部分主要是搭建好整个项目的