2015-04-26 2 views
3

Я пытался заказать мои контроллеры в Laravel 4 и добавление их некоторые интересные пространства именLaravel 4 Пространства имен маршрутов и пространств имен в контроллерах

Так я хотел маршруты, как этого администратора/учёного-групп И я хотел контроллер быть в папке под названием «админ»

Так у меня есть файл маршрут, как это:

//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, который находится в подпапке «админ»

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

Но всякий раз, когда я пытаюсь получить доступ к моему действию индекса в контроллере, я получаю эту ошибку.

Class 'admin\ScholarGroup' not found 

Таким образом, пространство имена влияют на мою модель пространство имена в следующей строке

$scholarGroups = ScholarGroup::paginate(10); 

Как избежать имен, затрагивающие эту модель имен класса?

ответ

2

Ваш контроллер находится в пространстве имен admin, а ссылки на другие классы от него будут относиться к этому пространству имен.

Таким образом, вы должны относиться к вашей модели с предыдущей обратной косой черты (так же, как вы делали с BaseController), как это:

<?php namespace admin; 

class ScholarGroupController extends \BaseController 
{ 
    public function index() 
    { 
     $scholarGroups = \ScholarGroup::paginate(10); 

     return View::make('scholar_groups.index',compact('scholarGroups')); 
    } 
} 

или импортировать его выше объявления класса, как это:

<?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() { 
    // . . . 
}); 
Смежные вопросы