路由到子文件夹中的控制器在Laravel 4中不起作用

时间:2013-01-24 14:49:36

标签: php controller routes laravel laravel-4

当我遇到这个问题时,我正在将Laravel 3应用更新到Laravel 4 ......

我尝试过的路线:

Route::get('backend/login', 'backend/UserController@login');
Route::get('backend/login', 'backend.UserController@login');

7 个答案:

答案 0 :(得分:6)

几个小时前我遇到了类似的问题,不得不用它做一些工作。

路线:

Route::group(array('prefix' => 'admin'), function() {
    Route::resource('/', 'admin\DashboardController');
});

在“controllers / admin”中我放了DashboardController:

namespace admin;

use Illuminate\Support\Facades\View;

class DashboardController extends \BaseController {

    public function index()
    {
        return View::make('admin/dashboard');
    }

}

这就是Laravel 4的诀窍。希望你发现它足够有用。 :)

答案 1 :(得分:4)

目前,在Laravel 4 Beta 1中,您可以“只”?使用命名空间。

例如,在您的控制器文件中:app / controllers / backend / UserController.php

<?php namespace Controllers\Backend;

use Illuminate\Routing\Controllers\Controller;

class UserController extends Controller {

    // Note extends Controller and not BaseController

    // Your stuff
}
?>

之后,在文件中:app / routes.php:

<?php
Route::get('backend/login', 'Controllers\Backend\UserController@login');

我不知道是不是更好的方式,而是在这里工作。编辑&amp; dump-autoload“composer.json”似乎无法正常工作。

如果有人可以改善这一点,他会让我的一天! :)

答案 2 :(得分:2)

如果您要使用Laravel 4,也许您应该看一下:您可以指定要在一组路线上使用的命名空间,如下所示:http://www.laravel-tricks.com/tricks/route-group-namespacing

所以在你的样本中:

Route::group(array('prefix' => 'backend', 'namespace' => 'backend'), function()
{

    Route::get('login', 'UserController@login');

});

它就像一个魅力:)

我一直在使用它,并且相当不错,它可以帮助您保持代码更清晰,更易理解。试一试!

答案 3 :(得分:0)

我建议做

Route::group(array('prefix' => 'backend'), function() {
    // Responds to Request::root() . '/backend/user'
    Route::resource('login', 'UserController');
});

在此处查看更多信息

Laravel 4 nested resource controllers Route::resource('admin/photo', 'PhotoController'); not working

答案 4 :(得分:0)

app / controllers目录中的我的管理员控制器

class AdminController extends BaseController {
/**.
 * @return \AdminController
 */
    public function __construct()
    {

    }
}

现在我在控制器文件夹中有一个名为admin的文件夹,即app / controllers / admin,我有另一个名为AdminDashboardController.php的控制器

class AdminDashboardController extends AdminController {

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
    public function getIndex()
    {
    return View::make('admin/dashboard');
    }
    }

最后我的Route.php文件

Route::group(array('prefix' => 'admin'), function()
{
    # Admin Dashboard
    Route::controller('/', 'AdminDashboardController');
 });

希望这会有所帮助......: - )

答案 5 :(得分:0)

如此处所述,使用Laravel 4.1,您可以指定要在一组路由上使用的命名空间,如下所示:http://www.laravel-tricks.com/tricks/route-group-namespacing

我一直在使用它,并且相当不错,它可以帮助您保持代码更清晰,更易理解。试一试!

答案 6 :(得分:-1)

你也可以将你的后端/管理面板放在一个包装中...以便思考:)