簡體   English   中英

從 Laravel Routes.php 調用控制器函數

[英]Call Controller Function from Laravel Routes.php

我在Orders_Controller中有一個名為 getOrders($user) 的函數。 它調用原始數據庫查詢並構建要返回的 JSON 數組。

我不知道如何從我的路由文件中調用這個函數。

基本上我在路由中收到一個 POST,插入新的訂單,然后我想從這個路由函數調用 getOrders(user) 來獲取給定用戶的所有現有訂單。

有人能幫我弄清楚如何從 Routes.php 中調用這個函數嗎?

路由.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 ...");
    }
}

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

希望有幫助。

我使用了另一種方法,可能不正確,但它可能對您有用。

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

有關更多信息以及如何使用它,請查看Controller 類的文檔。

myOrders 函數可能應該進入您的訂單模型,因為它使用數據訪問。 然后,要調用它,您需要執行 Orders::myOrders($user)。

更簡單的方法是將控制器作為類調用

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

路由.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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM