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é!