从Laravel Routes.php调用控制器功能

时间:2012-12-02 21:46:35

标签: php post controller laravel

我在Laravel的Orders_Controller中有一个名为getOrders($ user)的函数。它调用原始数据库查询并构建要返回的JSON数组。

我无法弄清楚如何在我的路线文件中调用此函数。

基本上我在路由中收到一个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 ...");
    }
}

5 个答案:

答案 0 :(得分:4)

根据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)的原因。

希望有所帮助。

答案 1 :(得分:4)

我使用过另一种方式,可能是错误的,但它可能适合你。

$userOrders = Controller::call('order@myOrders', array($thisUser))->content

有关更多信息以及如何使用它,请查看Controller class的文档。

答案 2 :(得分:2)

myOrders函数可能应该放在您的订单模型中,因为它处理数据访问。然后,要调用它,你可以执行Orders :: myOrders($ user)。

答案 3 :(得分:2)

更简单的方法是将呼叫控制器作为类

Route::post( 'post', function() use ($user) {
  return (new OrderController)->myOrders($user);
});

答案 4 :(得分: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);
    }
}