Laravel 4:路由到localhost/controller/action

sam*_*oul 6 url-routing laravel laravel-4 laravel-routing

我或多或少是Laravel 4的新手.我以前从未使用过路线,但通常我习惯的是url/controller/action然后是我的后端路由.我已经阅读了几次路由和控制器的文档,并阅读了一些教程,因此,我试图弄清楚如何在不为每个控制器和操作编写路由的情况下使其工作.

我试过类似的东西

Route::get('{controller}/{action}', function($controller, $action = 'index'){
    return $controller."@".$action;
});
Run Code Online (Sandbox Code Playgroud)

现在,我知道这是错误的,因为它不起作用,但我错过了什么?在大多数教程和内容中,我看到的路径或多或少都是每个控制器和动作,如:

Route::get('/controller/action' , 'ControllerName@Action');
Run Code Online (Sandbox Code Playgroud)

这看起来很傻,而且浪费时间给我.

反正有没有实现我想要的?

Mak*_*ita 7

如果您正在寻找更自动化的路由,这将是Laravel 4方式:

路线:

Route::controller('users', 'UsersController');
Run Code Online (Sandbox Code Playgroud)

控制器(在本例中为UsersController.php):

public function getIndex()
{
    // routed from GET request to /users
}

public function getProfile()
{
    // routed from GET request to /users/profile
}

public function postProfile()
{
    // routed from POST request to /users/profile
}

public function getPosts($id)
{
    // routed from GET request to: /users/posts/42
}
Run Code Online (Sandbox Code Playgroud)

正如The Shift Exchange所提到的,以冗长的方式做这件事有一些好处.除了他链接的优秀文章之外,您还可以为每个路径创建一个名称,例如:

Route::get("users", array(
    "as"=>"dashboard",
    "uses"=>"UsersController@getIndex"
));
Run Code Online (Sandbox Code Playgroud)

然后,在应用程序中创建URL时,使用帮助程序生成指向已命名路径链接:

$url = URL::route('dashboard');
Run Code Online (Sandbox Code Playgroud)

然后,通过对控制器/操作的更改来预测链接.

您还可以直接生成可用于自动路由的操作的链接.

$url = URL::action('UsersController@getIndex');
Run Code Online (Sandbox Code Playgroud)


小智 6

app\
    controllers\
        Admin\
           AdminController.php
        IndexController.php
Route::get('/admin/{controller?}/{action?}', function($controller='Index', $action='index'){
        $controller = ucfirst($controller);
        $action = $action . 'Action';
        return App::make("Admin\\{$controller}Controller")->$action();
    });

Route::get('/{controller?}/{action?}', function($controller='Index', $action='index'){
        $controller = ucfirst($controller);
        $action = $action . 'Action';
        return App::make("{$controller}Controller")->$action();
    });
Run Code Online (Sandbox Code Playgroud)