Laravel 4中子文件夹控制器的路由无法正常工作

8

当我尝试将Laravel 3应用程序更新到Laravel 4时,遇到了以下问题...

我尝试过的路由:

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

你更新了autoload文件吗?(composer dump-autoload) - J.T. Grimes
是的,自动加载文件已经更新了,但并没有解决问题。 - Clifford James
你只是收到了404错误吗?还是你收到了更有用的错误信息?如果你收到了错误信息,请在这里发布它。 - J.T. Grimes
另外,你的控制器是否在命名空间中? - J.T. Grimes
你最终解决了这个问题吗?我认为你只需要使用Route::get('backend/login', 'UserController@login');一行代码。一旦你的控制器被注册,Laravel就知道它在哪里了。 - Joshua
显示剩余2条评论
7个回答

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上起了作用。希望你觉得它足够有用。 :)


非常有用。你救了场。 - akbarbin

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');

我不知道这是否是更好的方法,但是在这里工作。编辑并转储自动加载“composer.json”似乎实际上不起作用。

如果有人能改进这个,他将让我的一天!:)


好的,就像我说的那样,请注意: 不要写成 "class UserController extends BaseController" 而是 "class UserController extends Controller" - Pierre Broucz
2
呃,我给你的示例代码在这里可以工作 :/。不要忘记在添加/删除控制器后运行“composer dump-autoload”:文档/控制器 - Pierre Broucz
很高兴能帮助到你,现在享受使用 Laravel 的乐趣吧 :) - Pierre Broucz
好的,“composer dump-autoload”解决了问题,但现在我遇到了以下错误:FatalErrorException: Error: Class 'Controllers\Backend\View' not found,出现在这行代码上:return View::make('backend.user.login'); - Clifford James
嗯,这看起来像是经典的包开发……今天我不能再测试了,但可以阅读jason lewis博客了解更多信息。 您可以尝试在控制器中包含:use Illuminate\View\Environment;,并设置__construct()函数。 - Pierre Broucz
显示剩余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');

});

它的运作效果非常好:)

我一直在使用它,而且非常不错,它可以帮助你保持代码更加清晰易懂。试试看吧!


0

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');
 });

希望这可以帮到你..:-)


0

-1

你也可以将后端/管理面板打包成一个包..值得思考 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接