Thumbnail
Category: Laravel

Tạo Package trong Laravel

Date: November 19, 2023
21 views

1. Khởi tạo package và route

Tạo folder packages tại folder gốc, trong folder packages tạo folder feature cần làm (ở đây mình ví dụ translate-tool).

Mở terminal ở folder translate-tool và chạy lệnh composer init

Package name: haodt/translate-tool

Description: Translate vuejs text japan

Author: enter

Minimun stability: dev

Pakage Type: libarary

Would you like: no

Would you like: no

Add PSR-4: enter

Do you confirm: yes

Create folder Provides trong folder src và file TranslateServiceProvider.php

<?php

namespace TranslateTool\Providers;

use Illuminate\Support\ServiceProvider;

class TranslateServiceProvider extends ServiceProvider {
  /**
  * Bootstrap the application services.
  *
  * @return void
  */
  public function boot()
  {
    $this->loadRoutesFrom(__DIR__.'/../routes/web.php');
  }

  /**
  * Register the application services.
  *
  * @return void
  */
  public function register()
  {
  //
  }
}


Create folder routes trong folder src và file web.php

<?php
Route::get('/abc', function () {
  return 'abc';
});

Chỉnh sửa file composer.json trong folder packages/translate-tool  (dòng 8 tôi xóa đi HaoDT - bạn có thể giữ lại nhé)

{
  "name": "haodt/translate-tool",
  "description": "translate vuejs text japan",
  "type": "library",
  "license": "MIT",
  "autoload": {
    "psr-4": {
      "TranslateTool\\": "src/"
    }
  },
  "authors": [
    {
      "name": "HaoDT",
      "email": "tronghaomaico@gmail.com"
    }
  ],
  "minimum-stability": "dev",
  "require": {}
}

Chỉnh sửa file composer.json trong folder root.

// => autoload dev thêm TranslateTool như ở file composer.json trong package,
// nhưng value là đường dẫn từ folder root đến src
"autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/",
      "TranslateTool\\": "packages/translate-tool/src/"
    }
},


Đăng ký trong config/app.config

...
		/*
     * Application Service Providers...
     */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    // App\Providers\BroadcastServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
    TranslateTool\Providers\TranslateServiceProvider::class,

  ],

Run command ở root folder

composer dump-autoload


Xong rồi, test thử thôi. Bạn start server lên.

php artisan serve
  
// sau đó vào đường dẫn
http://127.0.0.1:8000/abc
// xem có ra text abc không nhé, nếu ra là ok rồi đó.


2. Tạo controllers cho package

Trong folder src tạo folder Http/Controllers và tạo file TranslateToolController.php

<?php

namespace TranslateTool\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class TranslateToolController extends Controller
{
  public function index() {
    return 'abc';
  }
}

Chỉnh sửa lại file routes/web.php

<?php
Route::group(['namespace' => 'TranslateTool\Http\Controllers'], function() {
  Route::get('/abc', 'TranslateToolController@index');
});

3. Tạo migration cho package

Tạo folder database/migrations và tạo file migration như bình thường.

add $this->loadMigrationsFrom(__DIR__.'/../database/migrations');   vào  Prividers/TranslateServiceProvider

<?php

namespace TranslateTool\Providers;

use Illuminate\Support\ServiceProvider;

class TranslateServiceProvider extends ServiceProvider {
  /**
  * Bootstrap the application services.
  *
  * @return void
  */
  public function boot()
  {
    $this->loadRoutesFrom(__DIR__.'/../routes/web.php');
    $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
  }

  /**
  * Register the application services.
  *
  * @return void
  */
  public function register()
  {
  //
  }
}


Chạy migrate bằng lệnh sau:

php artisan migrate --path=packages\translate-tool\src\database\migrations

4. Tạo Models trong package

Tạo thêm folder Models và sử dụng như bình thường.

5. Lưu ý

Khi làm việc với package, bạn lưu ý phần namespace nhé!


Copyright © 2025 All Right Reserved