2013-06-22 6 views
1

laravel4를 처음 사용하고 중첩 컨트롤러 설정 문제가 발생했습니다. admin 컨트롤러가 상주하는 컨트롤러 디렉토리에 "Admin"하위 디렉토리가 있습니다. 내 관리 컨트롤러가 내 컨트롤러 디렉토리의 "AdminController"를 확장합니다. 난 내가 http://admin.xyz.local로 이동하면Laravel 4의 중첩 컨트롤러

/** Admin Routes **/ 
Route::group(array('domain' => 'admin.vigap.local'), function() 
{ 
    //Dashboard 
    Route::get('/', 'Admin\[email protected]'); 

}); 

는하지만, 난 "을 (를) 찾을 수 없습니다 클래스 '관리자 \보기'를 말하는 오류가이

<?php 
namespace Admin; 

use AdminController; 

class HomeController extends AdminController { 

    public $layout = 'admin.layouts.master'; 

    public function index() { 

     $this->layout->content = View::make('admin.dashboard'); 
    } 
} 

같은 내 routes.php 파일에 설정 관리 컨트롤러가 ". 내가 뭘 잘못 했니?

답변

7

는 컨트롤러의 작품, 그것은 HomeController에서 당신이 Admin 네임 스페이스를 사용하는 단지 방식에 아무 문제가 없다, 다음 인덱스 기능에 당신은 View 클래스를 호출하지만, 그 클래스는 Admin 네임 스페이스의 일부가 아니므로 Class Admin\View을 찾을 수 없다는 오류가 표시됩니다.

하면 다음 두 가지 중 하나를 수행하십시오 :

use View

또는

$this->layout->content = \View::make('admin.dashboard');

는 작곡가 dump-에 대한

2

Route::get('/', 'Admin\[email protected]');Admin PHP namespace을 의미하고 Controllers 디렉토리의 하위 폴더는 아닙니다.

출처 : 당신이 등록하고있는 경로가 요청 될 때 당신이 당신의 컨트롤러를 어디에 두 라우터의 관점에서 http://laravel.com/docs/controllers

, 그것은 중요하지 않습니다가, 그것은 단지 필요가있는 클래스를 알고 싶어 를 호출 할 수 있습니다.

Route::get('/', '[email protected]');은 클래스 로더가 어디서나 HomeController 클래스를 찾을 것이므로 작동해야합니다.

출처 : 당신이 클래스 이름 충돌이있을 것이다, 그래서 http://forums.laravel.io/viewtopic.php?id=9917

그러나, 당신은 아마 이미 컨트롤러 디렉토리의 루트에 HomeController 있습니다. 나는 classmap가 업데이트되도록 새 클래스를 추가 한 후 composer dump-autoload를 실행하는 것을 잊지 마세요, 당신이 AdminHomeController 또한 Route::get('/', '[email protected]');

에 클래스 이름을 변경하는 것이 좋습니다.

+0

+1 (View 앞에 백 슬래시주의) 자동로드 ...이 점을 더 잘 이해하기 위해 내가 읽어야 할 내용을 말해 줄 수 있습니까? 컨트롤러? 컨트롤러가 Laravel 3에 등록 된 방식대로 등록되지 않았습니까? – Neo

+0

새 클래스를 추가 할 때만 (새 컨트롤러). 작성자는 신속한 자동 로딩을 위해 클래스의 PHP 파일 목록을 유지 관리하므로 새로운 클래스를 추가 할 때 작성자의 자동로드 파일을 새로 고쳐야합니다. 나는 Laravel이 당신의 laravel config에서 설정 한 경로와 그들의 이름을 기반으로 컨트롤러를 찾으려고 노력할 것이라고 생각한다. –