Laravel 4:路由到localhost / controller / action

时间:2013-08-12 00:16:24

标签: laravel laravel-4 url-routing laravel-routing

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

我试过像

这样的东西
Route::get('{controller}/{action}', function($controller, $action = 'index'){
    return $controller."@".$action;
});

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

Route::get('/controller/action' , 'ControllerName@Action');

这对我来说似乎很傻,而且浪费时间。

无论如何要实现我想要的目标吗?

3 个答案:

答案 0 :(得分:7)

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

路线:

Route::controller('users', 'UsersController');

Controller(在本例中为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
}

正如Shift Exchange所提到的,以冗长的方式做这件事有一些好处。除了他链接的优秀文章之外,您还可以创建name for each route,例如:

Route::get("users", array(
    "as"=>"dashboard",
    "uses"=>"UsersController@getIndex"
));

然后在应用程序中创建URL时,使用帮助程序生成link to a named route

$url = URL::route('dashboard');

然后,可以通过对控制器/操作的更改来证明链接。

您还可以直接生成链接,这些操作仍可用于自动路由。

$url = URL::action('UsersController@getIndex');

答案 1 :(得分: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();
    });

答案 2 :(得分:0)

我来自.Net世界,路由通常是:

/{Controller}/{action}/{id}

看起来像:

/Products/Show/1 OR /Products/Show/Beverages

在Laravel中我完成了这样的路由:

Route::get('/{controller?}/{action?}/{id?}', function ($controller='Home', $action='index', $id = null) {
    $controller = ucfirst($controller);
    return APP::make("{$controller}Controller")->$action($id);
});

控制器看起来大致如此:

class ProductsController extends BaseController {
    public function Show($id) {
        $products = array( 1 => array("Price" => "$600","Item" => "iPhone 6"),
                           2 => array("Price" => "$700", "Item" => "iPhone 6 Plus") );

        if ($id == null) {
            echo $products[1]["Item"];
        } else {
            echo $products[$id]["Item"];
        }

    }
}