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

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