Tạo Package trong Laravel
Contents
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é!