路由到子文件夹中的控制器在 Laravel 4 中不起作用
Posted
技术标签:
【中文标题】路由到子文件夹中的控制器在 Laravel 4 中不起作用【英文标题】:Route to controller in subfolder not working in Laravel 4 【发布时间】:2013-01-08 08:53:46 【问题描述】:当我遇到这个问题时,我正在将我的 Laravel 3 应用程序更新到 Laravel 4...
我尝试过的路线:
Route::get('backend/login', 'backend/UserController@login');
Route::get('backend/login', 'backend.UserController@login');
【问题讨论】:
你更新你的自动加载文件了吗? (作曲家转储自动加载) 是的,自动加载文件已更新,但没有解决问题。 你只是得到一个 404 还是你得到一个更有用的错误?如果您遇到错误,可以在这里发布吗? 另外,您的控制器是否在命名空间中? 不,控制器不在命名空间中。 【参考方案1】:如果你打算使用 Laravel 4,也许你应该看看这个:你可以指定在一组路由上使用的命名空间,你可以在这里看到:http://www.laravel-tricks.com/tricks/route-group-namespacing
所以在你的示例中:
Route::group(array('prefix' => 'backend', 'namespace' => 'backend'), function()
Route::get('login', 'UserController@login');
);
它就像一个魅力:)
我一直在使用它,并且非常好,它可以帮助您保持代码更清晰和更易于理解。试试看!
【讨论】:
【参考方案2】:正如这里所解释的,使用 Laravel 4.1,您可以指定要在一组路由上使用的命名空间,如您在此处看到的:http://www.laravel-tricks.com/tricks/route-group-namespacing
我一直在使用它,并且非常好,它可以帮助您保持代码更清晰和更易于理解。试试看!
【讨论】:
【参考方案3】: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');
);
希望这会有所帮助..:-)
【讨论】:
【参考方案4】:几个小时前我遇到了类似的问题,我不得不尝试一下才能让它正常工作。
路线:
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 上成功了。希望你觉得它足够有用。 :)
【讨论】:
这很有帮助。你拯救了这一天。【参考方案5】:您也可以将您的后端/管理面板放在一个包中..fruit 以供思考 :)
【讨论】:
【参考方案6】:我建议这样做
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
【讨论】:
【参考方案7】:目前,在 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');
我不知道是否是更好的方法,但在这里工作。 Edit & dump-autoload "composer.json" 实际上似乎不起作用。
如果有人能改进这一点,他会让我开心! :)
【讨论】:
还是不行:路由:Route::get('backend/login', 'Controllers\Backend\UserController@login');类(在 app/controllers/backend/UserController.php 中): 好的,就像我说的,注意:'"class UserController extends Controller"' 而不是 '"class UserController extends BaseController"' 哼,给你的示例代码在这里工作:/。不要忘记在任何添加/删除控制器之后运行“composer dump-autoload”:Docs/Controllers 很高兴帮助你,现在用 laravel 玩得开心 :) Ok "composer dump-autoload" 成功了,但现在我得到以下错误: FatalErrorException: Error: Class 'Controllers\Backend\View' not found on this line of code: return View:: make('backend.user.login');以上是关于路由到子文件夹中的控制器在 Laravel 4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章