2012-12-02 4 views
3

Laravel의 Orders_Controller에 getOrders ($ user)라는 함수가 있습니다. 원시 DB 쿼리를 호출하고 반환 할 JSON 배열을 작성합니다.Laravel Routes.php의 통화 컨트롤러 기능

내 경로 파일에서이 함수를 호출하는 방법을 알 수 없습니다.

기본적으로 경로에서 POST를 수신하고 새 Order를 삽입 한 다음이 Routes 함수에서 getOrders (user)를 호출하여 주어진 사용자의 모든 기존 Orders를 가져 오려고합니다.

Routes.php에서이 함수를 호출하는 방법을 알아낼 수 있습니까? (컨트롤러 폴더)

Routes.php

//Handle a new order POST 
Route::post('order', array('do' => function() { 
    ... 
    ... //HANDLE POST DATA AND INSERT NEW ORDER 
    ... 

    //GET ALL ORDERS FOR THIS USER FROM ORDER CONTROLLER 
    $userOrders = Order_Controller::myOrders($thisUser); 
} 

order.php

class Order_Controller extends Base_Controller 
{ 
    public function myOrders($user){ 
     return DB::query("SELECT ..."); 
    } 
} 

답변

2

larauser에서 제안한 것처럼 myOrders() 메서드를 모델로 옮기고 정적으로 호출 할 수 있습니다. 경로에 : (NUM) 여기에 다음 경로에 당신은 내가 당신이 내가 사용하는 이유의 사용자 ID를 전달하는 추측하고있어

Route::post('order/(:num)', function($user) 
{ 
    $userOrders = Order::myOrders($user); 

    // Do stuff here 
}); 

을 할 수있는 예를 들어

class Order extends Eloquent { 

    public static function myOrders($user) 
    { 
     // DB call here 
    } 
} 

입니다.

희망이 있습니다.

+0

그래서 컨트롤러에서 POST 데이터를 실제로 처리하고 컨트롤러에서이 함수를 호출해야합니까? 기존 사이트에서 Laravel을 구현하는 가장 좋은 방법을 이해하려고 노력하고 있지만 Route/Controller/Model이 어떻게 작동하는지 잘 모르겠습니다. – jamis0n

+0

@ jamis0n 당신도 할 수 있습니다 (내 취향). 당신은 당신의 컨트롤러를 등록하고 당신의 경우처럼 당신의 라우팅이 간단하다면 이벤트가 필요하지 않습니다. 컨트롤러를 등록하려면 라우트 파일에서'Route :: controller (array ('order', 'anothercontroller'));를 호출해야합니다. – afarazit

+0

Gotcha ... 그래서 Routes.php에서 POST 라우트를 제거하면 방금 Lolavel 예제로 구현 한 경우 주문에 대한 POST가 주문 컨트롤러에 잡힐 것입니다. – jamis0n

2

myOrders 기능은 아마도 그 데이터 액세스 작업 이후 주문 모델에 가야한다. 그런 다음 Orders :: myOrders ($ user)를 호출하면됩니다.

0

Routes.php

//Handle a new order POST 
Route::post('orders/(:num)', function($user) { 
    ... 
    ... //HANDLE POST DATA AND INSERT NEW ORDER 
    ... 
}); 

Route::get('orders', function($user) { 
    //GET ALL ORDERS FOR THIS USER FROM ORDER MODEL 
    $userOrders = Order::myOrders($user)->get(); 
}); 

응용 프로그램/모델/Order.php가 나는 어쩌면 잘못 사용한 또 다른 방법입니다,하지만 당신을 위해 작동 할 수

class Order extends Eloquent 
{ 
    public function myOrders($user_id) 
    { 
     return Order::where_user_id($user_id); 
    } 
} 
4

. 자세한 내용은 어떻게이 Controller class에 대한 설명서를 확인 사용하는 방법에 대한

$userOrders = Controller::call('[email protected]', array($thisUser))->content 

.

+0

이것은 나를 위해 작동하지 않습니다; URL :: action ('FooController @ method'); 또는 해당 헬퍼 : 'action ('FooController @ method'); ' http://laravel.com/docs/ controllers # basic-controllers – ptim

+0

이 답장은 Laravel 3을 기반으로 했으므로 변경되었을 수 있습니다. 잠시 동안 확인하지 않았습니다. – mattl

+1

잠깐 살펴 봤는데 Laravel 4에 'Controller :: callAction()'이 있는데, 똑같은 일을하는 것처럼 보입니다. 체크 아웃하고 작동하는지 알려주세요. 'http://laravel.com/api/4.1/](hlp://laravel.com/api/4.1/)'로 이동하여 'callAction'을 검색하십시오. – mattl