.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' => '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的更多相关文章
- .net转php laraval框架学习系列(二)项目实战---Models
上一篇已经介绍开发环境的搭建,如果有问题可以在文章后留言. 这篇将从项目实战开发,一步一步了解laravel框架. 在开发mvc项目时,models都是第一步. 下面就从建模开始. 实体关系图 由于不 ...
- .net转php laraval框架学习系列(一) 环境搭建
之前也没写过什么博客,可能文章结构比较混乱,想到那写到哪. 主要是把自己学习中的经验写下来. 为什么选择laravel框架,是因为laravel框架目前是Php最流行的框架,深入研究后发现和asp.n ...
- .net转php laraval框架学习系列(四) 项目实战---View
laravel的参考文档中view的讲解有些简单. 在实际项目开发中view的灵活性其实是非常大. 首先来看看laravel中的布局页 和asp.net mvc中有什么不同 <!DOCTYPE ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- spring框架学习(三)junit单元测试
spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...
- scrapy爬虫学习系列三:scrapy部署到scrapyhub上
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- DocX开源WORD操作组件的学习系列三
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- RabbitMQ学习系列三-C#代码接收处理消息
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...
- .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能
原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能 接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...
随机推荐
- TableView_图片异步加载 KVO
TableView 异步下载图片 ImageDownloader.h #pragma mark - 声明block //1,声明block typedef void(^Result) (UIImage ...
- c++ 高效文本读写
上数据结构课,做project,数据老师要求我们多做测试,而文本文件可以有效记录这些东东,这样我想起了文件的读写,下面是渣渣我个人的一些想法,大神们看见有错的,尽管指出(orz~~~囧,木有人看我的呀 ...
- 转:Linux内存管理之mmap详解
一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零.munmap执行相 ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- Python 2 到 Python 3的变化
Python 2.x到Python 3.x变化还是挺大的,具体的变化,参考官方文档: https://docs.python.org/3.0/whatsnew/3.0.html
- CSS常用操作-图片
index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- JDBC编程之优化
1.创建 dbconfig.properties driver=com.mysql.jdbc.Driver dburl=jdbc\:mysql\://localhost\:3306/mytest us ...
- mysql中pager命令妙用
pager命令的妙用在mysql,可以大大提高工作效率. 一 当处理大量数据时,不想显示查询的结果,而只需知道查询话费的时间. mysql> select * from t3; +----- ...
- Js中执行变量中的命令语句,也就是所谓的宏替换(很实用的例子)
Js中执行变量中的命令语句,也就是所谓的宏替换(很实用的例子) 由其做动态编程时非常有用,必须符合js中的语法,用eval能够执行. var aaa="alert('这是变量中的语句')&q ...
- Duanxx的技术问题:word界面显示模糊
今天打开word时,出现了word打开失败的现象,并且word的界面显示特别的模糊,找了好半天,才解决,问题见下图: 解决方式: 在word的文件->选项,这里面找到显示,然后勾选:禁用硬件图形 ...