Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Sử dụng các file php và các class ngoài trong Laravel Controller

Laravel là một PHP framework theo mô hình MVC và có một cấu trúc thư mục riêng nhưng đôi khi bạn cần những include những file php hoặc các class ở ngoài vào. Chúng ta sẽ đi vào từng trường hợp là class ở ngoài hoặc file php ngoài.

Sử dụng external class trong Controller

Ví dụ chúng ta có một class về giá sản phẩm như sau:

class PricesClass {
  public function getPrices() {
    return ['bronze' => 50, 'silver' => 100, 'gold' => 150];
  }
}

Vậy đưa class này vào đâu và sử dụng chúng như thế nào? 3 bước sau đây giúp bạn hiểu cách sử dụng external class trong Laravel Controller.

Bước 1: Đưa class này vào một thư mục nằm trong thư mục app

Mặc định, Laravel muốn bạn đưa các đoạn mã vào các thư mục có sẵn trong app như Events, Providers, Mails... tuy nhiên bạn có thể tạo ra một thư mục riêng để đặt các class của bạn vào đó, ví dụ app\Classes, app\Libraries, app\MyClass... bạn có thể tùy ý đặt tên. Tiếp theo bạn đưa class trên vào thư mục vừa tạo, trong ví dụ này tôi chọn app\Classes (file cụ thể sẽ là app\Classes\PriceClass.php).

Bước 2: Đánh namespace cho class

Đánh namespace cho class trùng với cấu trúc của thư mục giúp Laravel có thể quản lý được các class bạn tạo ra.

<?php

namespace App\Classes;

class PricesClass {
// ...

Bước 3: Sử dụng class trong Controller

Để sử dụng class vừa tạo, chúng ta sử dụng câu lệnh use và đằng sau là namespace và tên class.

namespace App\Http\Controllers;

use App\Classes\PricesClass;

class PagesController extends Controller
{
  /**
   * Display homepage.
   *
   * @return Response
   */
  public function getHome()
  {
    $pricesClass = new PricesClass();
    $prices = $pricesClass->getPrices();
    return view('pages.home', compact('prices'));
  }

}

Ok, vậy là chúng ta đã biết cách tổ chức các class riêng và sử dụng chúng trong Controller, thật đơn giản phải không.

Sử dụng một file php ở ngoài trong Controller

Một trường hợp khác, nếu file php của bạn không được viết theo kiểu hướng đối tượng và bạn vẫn muốn sử dụng lại file php này, phải làm thế nào? Ví dụ class PriceClass ở trên được viết trong một file prices.php như sau:

<?php

function getPrices() {
  return ['bronze' => 50, 'silver' => 100, 'gold' => 150];
}

File prices.php không có class, không có namespace... để sử dụng chúng ta tạo một thư mục app\Functions\prices.php. Có 2 cách để sử dụng file app\Functions\prices.php trong Controller như sau:

Cách 1: Sử dụng câu lệnh include, require

PHP hỗ trợ phương thức include() hoặc require() để có thể sử dụng file php ngoài.

namespace App\Http\Controllers;

use App\Classes\PricesClass;

class PagesController extends Controller
{
  /**
   * Display homepage.
   *
   * @return Response
   */
  public function getHome()
  {
    include(app_path() . '\Functions\prices.php');
    $prices = getPrices();
    return view('pages.home', compact('prices'));
  }

}

Chú ý phương thức app_path() để lấy thư mục gốc của app.

Cách 2: sử dụng file autoload của Composer.

Composer là công cụ quản lý thư viện mã nguồn của PHP, nó có một file composer.json chứa các thiết lập nằm ở thư mục gốc của project. Tìm đến phần autoload bạn có thể cho load tự động một file cụ thể hoặc cả thư mục chứa các file php bạn cần load như sau:

Ví dụ load tự động file app/Functions/prices.php

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Functions/prices.php"
        ]
    },

hoặc load cả thư mục app/Functions

    "autoload": {
        "classmap": [
            "database",
            "app/Functions"
        ],
    },

Sau đó thực hiện câu lệnh composer dump-autoload để các thay đổi trong composer.json được thực hiện, khi đó bạn có thể gọi thẳng các phương thức trong các file php này mà không cần sử dụng include() hay require().


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Xác thực tài khoản mới đăng ký bằng email trong Laravel

Laravel Socialite tích hợp xác thực Google vào website

0 Bình luận trong "Sử dụng các file php và các class ngoài trong Laravel Controller"

Thêm bình luận