2012-12-02 89 views
3

我在Laravel的Orders_Controller中有一個叫做getOrders($ user)的函數。它調用一個原始的數據庫查詢並構建一個返回的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(在Controllers文件夾)

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

回答

2

從larauser建議您可以將您的myOrders()方法移動到模型並靜態調用它。這裏有一個例子

class Order extends Eloquent { 

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

然後在你的路線,你可以做

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

    // Do stuff here 
}); 

我猜你傳遞這是我使用的原因,用戶ID(:NUM)的路線。

希望有所幫助。

+0

所以我真的應該在控制器中處理POST數據,然後在Controller中調用這個函數?我試圖理解在現有網站上實現Laravel的最佳方式,但我不確定路由/控制器/模型應該如何協同工作。 – jamis0n

+0

@ jamis0n你也可以這樣做(我的偏好)。如果您註冊了控制器,並且您的路由很簡單,那麼您不需要有路由。要註冊你的控制器,你需要調用Route :: controller(array('order','anothercontroller'));'在你的路由文件中 – afarazit

+0

Gotcha ...所以如果我從Routes.php中刪除了POST路由,如果通過我剛剛添加到答案中的Laravel示例實現了訂單,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的文檔。

+0

這不適合我;我已經有了更好的運氣:'URL :: action('FooController @ method');'或者相應的幫助者:'action('FooController @ method');' http://laravel.com/docs/控制器#basic-controllers – ptim

+0

是的,這個回覆是基於Laravel 3的,所以它可能會改變。還沒有檢查一段時間。 – mattl

+1

只是有一個快速的樣子,現在Laravel 4中有'Controller :: callAction()',看起來它會做同樣的事情 - 檢查它並讓我知道它是否工作。轉到[http://laravel.com/api/4.1/](http://laravel.com/api/4.1/)並搜索'callAction' – mattl