Laravel packages là gì?
Laravel Package là một cách để mở rộng chức năng của Laravel, giúp chúng ta có thể tái sử dụng chúng trong các dự án khác nhau mà không cần phải thêm chúng vào từng dự án một cách thủ công. Điều này giúp tiết kiệm thời gian và công sức, đồng thời cũng giúp chúng ta dễ dàng chia sẻ các chức năng phổ biến với cộng đồng Laravel.
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

Tạo 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()
{
//
}
}
Tạo 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, chỉ cần test thử thôi. Bạn hãy start server lên nhé.
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 đó.
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');
});
Tạo migration cho package
Tạo folder database/migrations và tạo file migration như bình thường.

Thêm $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
Tạo models cho package
Tạo thêm folder Models và sử dụng như bình thường.

Kết luận
Trên đây là những chia sẻ của mình về sử dụng Package của Laravel. Mong là bài viết này sẽ hữu ích cho các bạn khi tìm hiểu và ứng dụng vào dự án.