我在Laravel 5中创建了我的第一个管理面板。我想组织我的控制器,如:
Http
Controllers
Admin
DashboardController.php
Controller.php
WelcomeController.php
但是我在使用它时遇到了一些麻烦。
DashboardController.php是:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class DashboardController extends Controller {
public function index()
{
return \View::make('admin/dashboard');
}
}
?>
我的路线包含:
Route::group(array('namespace'=>'Admin'), function()
{
Route::get('/dashboard', array('as' => 'dashboard', 'uses' => 'DashboardController@index'));
});
// Eventually I will check for authentication using:
// Route::group(array('before' => 'auth', 'namespace'=>'Admin'), function()...
当我导航到/ dashboard时,我得到的错误是:
Class App \ Http \ Controllers \ Admin \ DashboardController不存在
有什么建议吗?谢谢!
答案 0 :(得分:3)
有一种误解, Laravel 5现在强制使用特殊的文件夹结构。
但是不,它没有
您的代码存在问题:
Route::group(array('namespace'=>'Admin'), function()
{
Route::get('/dashboard',
array('as' => 'dashboard', 'uses' => 'DashboardController@index'));
});
您正在使用名称空间Admin
,而在控制器中,没有这样的名称空间。因此,laravel会抱怨。
如果您删除此array('namespace=>'Admin')
,您的代码将运行良好。
但是如果你想保留命名空间,那就有了办法,
<?php
namespace App\Http\Controllers\Admin; \\Add the admin part.
use App\Http\Controllers\Controller;
class DashboardController extends Controller {
public function index()
{
return \View::make('admin/dashboard');
}
}
?>
现在,它将是可访问的。
注意#1: 但这并不意味着DashboardController必须位于admin
文件夹
事实上,它可以留在任何文件夹中。 只要保留正确的命名空间,它就与以前的版本相同。你需要做的就是运行一个
composer dump-autoload -o
or
php composer.phar dump-autoload -o
并且composer将在autoload中添加该文件。
答案 1 :(得分:2)
Laravel 5对以前版本的Laravel的命名空间标准有更严格的遵守。
这意味着更改文件夹结构也会更改自动加载器查找类的命名空间。
在这种情况下,您已将命名空间Admin
添加到DashboardController。
您的声明namespace App\Http\Controllers;
应更改为
namespace App\Http\Controllers\Admin;
同样,如果您对文件夹结构进行进一步更改,例如在SuperAdmin
的Admin下添加新的子文件夹,则需要将该命名空间添加到该文件夹中的类。这也适用于其他文件夹,例如Handlers
,Events
等
如果您开始更改文件夹结构,最好了解PHP的命名空间概念。这是一个快速学习的好教程:http://daylerees.com/php-namespaces-explained
答案 2 :(得分:0)
尝试在命名空间中使用文件夹名称的代码,您必须使用文件夹作为命名空间,即它遵循文件夹名称作为命名空间App / Http / Controller / Admin
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
class DashboardController extends Controller {
public function index()
{
return \View::make('admin/dashboard');
}
}
?>
路由保持原样
Route::group(array('namespace'=>'Admin'), function()
{
Route::get('/dashboard', array('as' => 'dashboard', 'uses' => 'DashboardController@index'));
});