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() {
    // . . .
});