2014-11-25 2 views
2

Codeigniter에서 몇 달을 보냈다가 laravel 4를 처음 접했을 때 laravel에 대한 많은 자습서를 살펴 보았습니다. 분명히 밝히고 싶은 것은 laravel의 Routes와 Controller 사이의 실제 차이점입니다. 왜냐하면 컨트롤러와 라우트 모두에서 뷰를 생성하고 생성 할 수 있습니다. 루트와 컨트롤러를 사용할 때 누구나 간단히 설명해 줄 수 있습니까? 다른 프레임 워크에서는 앱 내에서 특정 URL을 지정하는 경로가 필요하기 때문에 Controller는 실제 작업을 수행하는 데 사용되었지만 라우트에서는 라우팅 메커니즘을 제외하고 Route의 기본 개념을 얻지 못했습니다.Laravel :: 경로 대. 컨트롤러

답변

2

Routes::any()에서보기 또는 많은 작업을 수행 할 수 있다는 사실은 MVC 및 논리 분리에 대한 것입니다.

Route::get("admin", function(){})에서 실제로는 표준 라우팅 방식으로 컨트롤러에 바인딩해야하는 경로 콜백에 빠르게 액세스 할 수 있습니다. 하지만 Laravel을 사용하면 컨트롤러에 바인딩하는 대신 폐쇄 (function(){})에서 작업을 수행 할 수 있습니다. 어쨌든, 그것은 당신을 허용하지만, 당신은 그것을 피하는 것이 좋습니다. Route::get()에서는 '라우팅'만 있으면됩니다.

테스트 또는 일부 사소한 요청이없는 한 Route에서 콜백을 사용할 이유가 없습니다.

Route::get("admin", function(){ 
    return View::make("admin_index"); 
}); 

을 그리고 오히려이 함께 할 것입니다 : 그래서, 더 나은이를 방지하기 위해

Route::controller("admin", "AdminController"); 

그리고 당신의 AdminController.php에서을 :

// I mean create a file named AdminController.php in controllers directory under app. 
class AdminController extends Controller 
{ 
    function getIndex() 
    { 
     return View::make("admin_index"); 
    } 
} 

더 읽기에 대한 Route::controller하고 편안한 컨트롤러.

일부 주 :

  • 당신의 경로에 클로저를 추가 할 수있는 기능을 갖는 당신이 경로에 복잡한 의사 결정을 내리고 강력한 라우팅 시스템을 사용할 수 있습니다.

  • 이 콜백을 통해 경로에 조건을 추가 할 수 있습니다. 당신이 경로에서 분리

  • 갖는 컨트롤러는 응용 프로그램
    더 확장 덜 혼란을하고 앞으로 더
    편안하게 다른 코더한다.

  • 이렇게하면 문제에 더 집중하고 솔루션을 찾을 수 있습니다.
    이 물리적 분리는 매우 중요합니다. Route 내에 View :: make()
    을 사용하면 모든 문제가 서로 관련되어 코더에 대해
    혼동을 일으킬 수 있습니다.

+0

이 경로 라우팅 작업 만 할 수 있도록 다른 모든 로직은 컨트롤러 내부에 존재하게 의미 ~이다 tter utility yes? –

+1

@Syco Uraz 컨트롤러 내부의 모든 논리는 아니지만 경로 외부의 모든 논리. 다른 논리가 컨트롤러, 모델 및 라이브러리로 분할되어야하기 때문에 ... –

1

의 우리는 두 경우 모두에서 무슨 보자 : 여기

$route['blog/joe'] = "blogs/users/34"; 

당신이 application.com/blog/joe를 방문하십시오 CodeIgniter의에서

, 경로는 컨트롤러의 특정 방법에 요청을 가리키는 컨트롤러 BlogsController을 호출하고 users() 메서드를 호출하고 첫 번째 매개 변수로 34를 전달합니다. 다른 건 없어. 그들이 말했듯이, CI의 경로는 URL 문자열과 해당 컨트롤러 클래스/메소드 간의 일대일 관계 일뿐입니다.

  • 직접
  • 당신은 특정 컨트롤러에 요청을 가리킬 수 있습니다 당신은보기를 반환 할 수있는 간단한 응답
  • 를 반환 할 수 있습니다

    이제 Laravel, 당신은 많은 가능성을 가지고 당신은 폐쇄 일부 로직을 작성하고 다음

당신은의를 추가 할 수 있습니다를 수행 할 작업을 결정할 수 있습니다

  • 하는 방법 필터 추가, 정규 표현식에서의 매개 변수 검사, 별도의 이름 부여 등의 추가 기능을 제공하지만 이는 주요 기능입니다.

    많은 것들을 할 수있는 이유는 무엇입니까? 그것은 당신에게 당신이 필요로하는 어떤 방법으로 그들을 사용할 수있는 힘을줍니다. 예 :

    • 정적 HTML을 렌더링 할 필요가있는 작은 웹 사이트가 필요합니까? 이처럼 그들을 사용

      Route::get('/', function() { return View::make('greeting'); });

    • 전통적인 MVC 패턴을 사용하여 더 큰 응용 프로그램이 필요하십니까? 다음과 같이 사용

      Route::get('user/{id}', '[email protected]');

    • 이 편안하고 접근이 필요하십니까? 문제 없어. 이 모든 CRUD 방법에 대한 경로를 생성합니다

      Route::resource('photo', 'PhotoController');

    • 는 특정 Ajax 요청을 처리하기 위해 신속하고 더러운 뭔가를 필요하십니까? 없이 또는 약간의 논리와 매우 간단한 일 경우 컨트롤러 대신 사용할 : DR을,

      Route::post('foo/bar', function() { return 'Hello World'; });


    TL : 간단하게. 그렇지 않으면 항상은 MVC 원칙을 고수하고 컨트롤러로 연결하여 실제 작업을 수행합니다.

  • 5

    Laravel에서는 컨트롤러를 건너 뛰고 비즈니스 논리를 수행하고 경로에서보기를 생성하는 작업을 수행 할 수 있습니다.

    E.g I have a link b2.com/getUsers so in routes.php I can write: 
    
        Route::get('/getUsers',function() 
        { 
         $users=User::All(); //select * from users 
         return View::make('allUsers')->with('users',$users); 
        } 
    

    그래서, 여기에 우리가 전혀 컨트롤러를 사용하지 않았고 당신이 아주 잘 응용 프로그램의 모든 요청을 처리하기 위해이 작업을 수행 할 수 있습니다, 모두 얻을 요청 b2.com/getUsers를 제공하고 게시하다.

    그러나 애플리케이션이 크고 복잡한 비즈니스 로직을 가진 500 개 이상의 URL을 가지고 있다면 모든 것을 하나의 routes.php에 넣는 것을 상상해보십시오. 그것은 완전히 그것을 형사상 지저분하게 만들 것이며 건축의 모든 목적은 무너질 것입니다. 따라서 우리가 일반적으로 할 만 라우팅과 나는 보통 로그인에 대한 예 관련 활동을위한 컨트롤러를 만들

    So the same example can be solved as: 
    
        To handle link: b2.com/getUsers 
    
        In routes.php 
    
        Route::get('/getUsers',array('before'=>'auth','uses'=>'[email protected]')); 
    
        MyController has the method getUsers defined like this: 
    
        public function getUsers() 
        { 
         $users=User::All(); //select * from users 
         return View::make('allUsers')->with('users',$users); 
        } 
    

    (컨트롤러 내부 뷰의 생성과 함께) 모든 비즈니스 로직을 작성하기위한, 예비 routes.php입니다/가입/로그 아웃 내가 AuthController 및 가 routes.php 통해 AuthController로 연결됩니다 그 활동에 관련된 모든 링크를 만들 수는