“使用”关键字对于laravel路由有何意义?

时间:2014-02-21 01:29:04

标签: php laravel

我是laravel的新手并且尽力使用RTM,但很难理解一些事情。我认为在路由方面我没有意识到上下文的预期水平。在审核the documentation for routing时,我发现uses关键字允许一个Attach(ing) A Filter To A Controller Action,但这意味着什么?我有一个使用uses关键字的现有网站,但我不知道它实际上在做什么。有人可以解释(一个比laravel文档更彻底的选项卡),并展示一个非常简单的例子,它实际上是做什么的?

2 个答案:

答案 0 :(得分:3)

路由的关键字uses是您定义将使用哪个操作(控制器方法或匿名函数)来处理该特定路由的位置。拿这个控制器方法示例:

Route::get('user', array('uses' => 'UserController@showProfile'));

它表示uses将调用showProfile类中的方法UserController,这将是类:

class UserController extends Controller {

    public function showProfile 
    {
       return "Hi! I'm the showProfile method!";
    }

}

所以,如果你点击了

http://localhost/user

你应该看到消息

Hi! I'm the showProfile method!

因为您的路线执行了您在uses

中定义的操作

匿名函数(闭包)示例如下:

Route::get('user', array('uses' => function() {

    return "Hi, I'm a closure!";

}));

答案 1 :(得分:3)

安东尼奥的答案非常完美地回答了你的(确切)问题,但我想我会将我的评论添加到问题的更广泛的背景中,因为我觉得你实际上并不想知道uses是什么,但是通常会被路由工作的方式混淆(你提到uses是用于过滤器,但它不是,但它的使用是添加过滤器配置的副作用)。所以请允许我解释一下:

路由器方法实际上有点简单,但您只需知道他们期望的语法。有两种主要形式,未配置和配置:

未配置的:

// syntax:
Route::get($route, $action);

// controller method
Route::get('some/route', 'Controller@action');
// closure
Route::get('some/route', function () {
    return View::make(/* etc. */);
});

但是只要您需要将配置添加到给定路由(包括过滤器,命名等),您需要使用稍微不同的语法:

// syntax:
Route::get($route, $config); // where $config is an array

// controller method
Route::get('some/route', array(
    'as'   => 'my.route.name',
    'uses' => 'Controller@action',
));

// closure
Route::get('some/route', array(
    'before' => 'some.filter',
    'uses'   => function () {
        return View::make(/* etc. */);
    }
));

// closure alternative
Route::get('some/route', array(
    'before' => 'some.filter',
    function () {
        return View::make(/* etc. */);
    }
));

因此,只要您需要为路线命名(使用as)或添加过滤器(使用beforeafter),您需要将更简单的语法转换为稍微复杂的数组语法。当你把它变成一个数组时,你仍然需要一种方法告诉Laravel实际使用什么 - 这就是uses的用途。