您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP技术 > PHP应用

使用 Laravel4 创建博客(三):Routing/路由

作者:UncleToo  来源:翻译  日期:2014-02-20 8:08:23
收藏  评论:( 0 )  阅读:3876

提示:如果你是首次看到这篇文章,请移步至以下两篇文章:

使用 Laravel4 创建博客(一):Models and Seeding

使用 Laravel4 创建博客(二):Controllers/控制器


在前面的两篇教程中,我们已经涵盖了:

  • Laravel设置

  • Laravel迁移

  • 创建Model

  • Seeding数据库

  • 控制器

在本片教程中,我们继续路由的介绍。


Laravel中的路由

路由在任何MVC框架应用程序运作中起着至关重要的作用。 它指定了一个请求和响应之间的映射,即控制器action。 换句话说,路由定义了web应用程序的入口点。

Laravel自带有一个非常强大的路由组件的Symfony,为我们提供一个易于使用的接口和一组丰富的功能。


定义路由

Laravel框架里,我们在app/routes.php目录下定义我们的应用程序路由,下面是一个简单的实例routes.php:

<?php
// will be used to handle GET requests.
Route::get('index',function()
{
    echo 'this is index page';
});
Route::get('login',function()
{
    echo 'GET login requests will be hndled here.';
});
// will be used to handle POST requests.
Route::post('login', function()
{
    echo 'POST login requests will be handled here.';
});
?>


我们还可以使用控制器的action:

<?php
Route::get('users', 'UsersController@getIndex');
?>


在这种情况下,所有到/users的请求,都将授权给UserController的getIndex()。我们也可以定义Route::delete和Route::put路由进行删除和使用HTTP相应。


路由参数

<?php
// parameter {id} will be passed to the closure.
Route::any('post/{id}',function($id)
{
    echo "post with id: $id";
});
//binding models to route parameters.
Route::model('post','Post'); //binds a model to the route parameter {post}
// A model with given post id will be passed to closure for any HTTP request.
Route::any('post/{post}',function($post)
{
    echo "post with id: $post->id";
});
?>


路由的命名和过滤器

路由过滤器提供了一种方便的方式限制访问给定的路线,用于创建需要验证的网站。有几个过滤器包含在Laravel框架,如auth、auth.basic、guest、csrf。他们都是位于app/filters.php文件中。

下面我们为给定的路由定义一个过滤器:

<?php
Route::filter('simpleBeforeFilter', function()
{
    echo 'this is simple before filter';
});
Route::get('admin',['before'=>'simpleBeforeFilter',function()
{
    echo 'simpleBeforefilter is already called';
}]);
?>

我们还可以使用as关键字定义路由,作为数组的第二个参数:

<?php
Route::get('admin',['as'=>'admin.home','before'=>'simpleBeforeFilter',function()
{
    echo 'simpleBeforefilter is already called';
}]);
//another example using controller action.
Route::get('/post/list',['as' => 'post.list','uses' => 'PostController@listPost']);
?>

命名一个路由更易于生成url重定向,例如:

<?php
URL::route('post.list'); //generates a url to /post/list route.
?>

在Laravel的官方手册里关于路由有很详细的介绍,有兴趣的可以参考一下。


下面就为我们的博客程序创建路由

<?php
//file: app/routes.php
/* Model Bindings */
Route::model('post','Post');
Route::model('comment','Comment');
/* User routes */
Route::get('/post/{post}/show',['as' => 'post.show','uses' => 'PostController@showPost']);
Route::post('/post/{post}/comment',['as' => 'comment.new','uses' =>'CommentController@newComment']);
/* Admin routes */
Route::group(['prefix' => 'admin','before'=>'auth'],function()
{
    /*get routes*/
    Route::get('dash-board',function()
    {
        $layout = View::make('master');
        $layout->title = 'DashBoard';
        $layout->main = View::make('dash')->with('content','Hi admin, Welcome to Dashboard!');
        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']);
});
/* Home routes */
Route::controller('/','BlogController');
?>

在上面的代码中,开始的两个语句将绑定Post和Comment模型路由参数。接下来的两个路由post.show和comment.new将分别被用来显示单篇文章,并允许用户发表评论。

下面我们需要定义一组管理路由,用admin前缀区分用户路由。在管理路由组里使用路由命名更容易产生复杂的URL,如URL::route('post.edit',12)将生成URL:http://localhost/admin/post/12/edit。


保护管理路由和身份验证

Laravel附带了一些预定义过滤器包括auth和guest过滤器。 auth过滤器会检查当前用户是否登录,否则将用户重定向到登录页面。guest过滤器是auth计数器部分。


下面是auth过滤器代码:

<?php
//file: app/filters.php
Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::guest('login');
});
?>

正如你在app / routes.php文件中看到的,我已经使用这个过滤器的admin路由组。所以,当我们尝试访问管理路由组中的路由之一时,这个过滤器将确保每个用户已经登录到应用程序。


关于Laravel框架的路由部分我们就讲完了。在下节PHP教程中,我们将一起讨论如果为应用程序布局及创建视图。更多PHP教程请关注UncleToo中文网




除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/application/823.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论