Laravel 4控制器中的命名空间路由和命名空间
Laravel 4 Namespaces routes and namespaces in controllers
我试图在 Laravel 4 中订购我的控制器并为它们添加一些不错的命名空间
所以我想要这样的路线
admin/scholar-groups
我希望控制器位于名为 'admin'
的子文件夹中
所以我有一个这样的路由文件:
//Admin Routes
Route::group(array('namespace' => 'admin'), function()
{
Route::group(array('prefix' => 'admin'), function()
{
# Scholar Groups Controller
Route::group(['before' => 'auth|adminGroup'], function()
{
Route::resource('scholar-groups', 'ScholarGroupController');
});
});
});
然后我在我的 scholarGroupController 中添加了一个命名空间,它位于一个名为 'admin'
的子文件夹中
<?php namespace admin;
class ScholarGroupController extends \BaseController {
/**
* Display a listing of the resource.
* GET /scholargroup
*
* @return Response
*/
public function index()
{
$scholarGroups = ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
但是每当我尝试访问 Controller 中的索引操作时,我都会收到此错误。
Class 'admin\ScholarGroup' not found
因此命名空间影响了下一行中我的模型命名空间
$scholarGroups = ScholarGroup::paginate(10);
如何避免命名空间影响此模型 class 命名空间?
您的控制器在 admin
命名空间中,并且从那里引用其他 classes 将相对于该命名空间。
所以你需要在引用你的模型之前加上一个反斜杠(就像你在 BaseController
中所做的那样),就像这样:
<?php namespace admin;
class ScholarGroupController extends \BaseController
{
public function index()
{
$scholarGroups = \ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
}
或像这样在 class 声明上方导入它:
<?php namespace admin;
use ScholarGroup;
class ScholarGroupController extends \BaseController
{
public function index()
{
$scholarGroups = ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
}
另外,您不需要 Route::group
两次。你可以这样做:
Route::group(array('prefix' => 'admin', 'namespace' => 'admin'), function() {
// . . .
});
我试图在 Laravel 4 中订购我的控制器并为它们添加一些不错的命名空间
所以我想要这样的路线 admin/scholar-groups 我希望控制器位于名为 'admin'
的子文件夹中所以我有一个这样的路由文件:
//Admin Routes
Route::group(array('namespace' => 'admin'), function()
{
Route::group(array('prefix' => 'admin'), function()
{
# Scholar Groups Controller
Route::group(['before' => 'auth|adminGroup'], function()
{
Route::resource('scholar-groups', 'ScholarGroupController');
});
});
});
然后我在我的 scholarGroupController 中添加了一个命名空间,它位于一个名为 'admin'
的子文件夹中 <?php namespace admin;
class ScholarGroupController extends \BaseController {
/**
* Display a listing of the resource.
* GET /scholargroup
*
* @return Response
*/
public function index()
{
$scholarGroups = ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
但是每当我尝试访问 Controller 中的索引操作时,我都会收到此错误。
Class 'admin\ScholarGroup' not found
因此命名空间影响了下一行中我的模型命名空间
$scholarGroups = ScholarGroup::paginate(10);
如何避免命名空间影响此模型 class 命名空间?
您的控制器在 admin
命名空间中,并且从那里引用其他 classes 将相对于该命名空间。
所以你需要在引用你的模型之前加上一个反斜杠(就像你在 BaseController
中所做的那样),就像这样:
<?php namespace admin;
class ScholarGroupController extends \BaseController
{
public function index()
{
$scholarGroups = \ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
}
或像这样在 class 声明上方导入它:
<?php namespace admin;
use ScholarGroup;
class ScholarGroupController extends \BaseController
{
public function index()
{
$scholarGroups = ScholarGroup::paginate(10);
return View::make('scholar_groups.index',compact('scholarGroups'));
}
}
另外,您不需要 Route::group
两次。你可以这样做:
Route::group(array('prefix' => 'admin', 'namespace' => 'admin'), function() {
// . . .
});