Create a class Custom in Laravel 8

min read

Day 26 #100DaysOfCode

Trong Laravel thường ta cũng cần phải Custom một Class để cấu hình một vấn đề nào đó, nên nay mình đi tìm hiểu cách tạo một class trong Laravel, sao đó gọi nó trong Controller

Okay, đầu tiên mình sẽ tạo một class name "CustomOrder.php" trong thư mục "App\Classes", chính vì vậy, bạn cũng cần tạo thư mục "Classes" để chứa file "CustomOder.php"

<?php

//App\Classes\CustomOrder

namespace App\Classes;

use App\Models\Order;
class CustomOrder{
    
    protected $order;
    public function __construct(Order $order) {
        $this->order = $order;
    }
    public function setOrder($order) {
        $this->order = $order;
    }
 
    public function getOrder(){
        return $this->order;
    }

    public static function getAllOrder(){
        return Order::all();
    }
    
}

Bạn có thể sử dụng model mà bạn muốn dùng trong file này cũng được nhé, hiện tại mình use App\Models\Order , bởi vì mình muốn trả về dữ liệu của Order

Ngon lành cành đào, giờ ta hãy tạo một class Controller để xử lý vấn đề thôi, 

use App\Classes\CustomOrder;
class OrdersController extends Controller
{

    protected $customOrder;
    public function __construct(CustomOrder $customOrder)
    {
        $this->customOrder = $customOrder;
      
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $order = Order::findOrFail(8);
        $this->customOrder->setOrder($order);
        echo $this->customOrder->getOrder();

        //call function static
       echo CustomOrder::getAllOrder();
    }
}

Trong đoạn code trên mình cần import class mà mình vừa tạo lúc ban đầu

use App\Classes\CustomOrder;

Sau đó mình tạo một function __construct() để gọi đối tượng class "CustomOrder"

 protected $customOrder;
    public function __construct(CustomOrder $customOrder)
    {
        $this->customOrder = $customOrder;
 
    }

Để sử dụng ta chỉ cần dùng $this để trỏ tới các function được cài đặt trong class "CustomOrder"

 $order = Order::findOrFail(8);
  $this->customOrder->setOrder($order);
  echo $this->customOrder->getOrder();

Nếu trong class "CustomOrder" sử dụng từ khóa "static" cho function thì ta cần phải gọi theo cách sau

  echo CustomOrder::getAllOrder();

Sau khi cài đặt các vấn đề trên, giờ ta tiếp tục hãy mở file "composer.json" để cài đặt gọi class "CustomOrder

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files":[
            "app/Classes/CustomOrder.php"
        ]
    },

Bạn xem đoạn code trên mình có gọi class  "app/Classes/CustomOrder.php"

Bước sau cùng là bạn hãy chạy lệnh cmd như sau:

composer dump-autoload

Sau đó bạn có thể sử dụng được một class custom theo ý mình rồi