[Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 3: Load migrations, models, translations
Trong bài tiếp theo này mình sẽ hướng dẫn các bạn load migrations cho modules, sử dụng models và translations.
1. Load migrations.
Việc load migrations cho module cũng đơn giản thôi, các bạn chỉ việc thêm vào hàm boot của /core/demo/src/Providers/DemoServiceProvider.php
$this->loadMigrationsFrom(__DIR__ . '/../../database/migrations');
Chúng ta sẽ load migrations từ thư mục /core/demo/database/migrations, vậy nên hãy tạo thư mục này nhé.
Giờ hãy thử migration đầu tiên nào. Chạy lệnh:
php artisan make:migration create_demo_table --path=core/demo/database/migrations
Tham số –path là để migration được tạo ra trong đúng thư mục mà mình đã tạo nhé, các bạn có thêm tham số –table hay –create tuỳ ý như tạo migration bình thường.
Thêm cột name vào trong bảng demo cho nó vui, source file migration tạo ra sẽ như thế này.
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateDemoTable extends Migration { /** * Run the migrations. * @return void */ public function up() { Schema::create('demo', function (Blueprint $table) { $table->increments('id'); $table->text('name'); $table->timestamps(); }); } /** * Reverse the migrations. * @return void */ public function down() { Schema::dropIfExists('demo'); } }
Tiếp theo là thiết lập kết nối database trong .env và chạy php artisan migrate để tạo database thôi.
2. Tạo model.
Giờ chúng ta đã có bảng demo, hãy tạo model cho bảng này, tạo file /core/demo/src/Models/Demo.php với nội dung.
<?php namespace Botble\Demo\Models; use Illuminate\Database\Eloquent\Model; class Demo extends Model { /** * @var string */ protected $table = 'demo'; /** * @var array */ protected $fillable = ['name',]; }
Giờ test thử cái model này thôi.
Sửa lại cái /core/demo/src/Http/Controllers/DemoController.php
<?php namespace Botble\Demo\Http\Controllers; use App\Http\Controllers\Controller; use Botble\Demo\Models\Demo; class DemoController extends Controller { /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function getIndex() { Demo::create(['name' => 'Demo ' . time()]); return view('botble-demo::index'); } }
Vậy là giờ khi bạn truy cập http://localhost:8000/demo thì nó sẽ tự tạo 1 record trong bảng demo, demo nhỏ cho nó nhanh 😀
3. Load translation
Phần này cũng tương đối đơn giản, đầu tiên hãy tạo file /core/demo/resources/lang/en/demo.php với nội dung.
<?php return [ 'name' => 'Demo', ];
Để load translation này lên thì ta thêm trong hàm boot của /core/demo/src/Providers/DemoServiceProvider.php
$this->loadTranslationsFrom(__DIR__ . '/../../resources/lang', 'botble-demo');
Vậy là xong, bây giờ để dùng translation thì ta chỉ cần gọi trans(‘botble-demo::demo.name’) chẳng hạn.
Trong bài này mình chỉ làm vài ví dụ đơn giản. Khá là dễ để xây dựng package cho riêng mình. Hi vọng các bạn thực hiện thành công 😀
Các bạn có thể xem các thay đổi so với phần trước tại đây: https://github.com/sangnguyenplus/laravel-package-demo/commit/a6f4aad3f9957e0c9d235ec3a8d34e164abd8b74
Phần trước: [Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 2: Load views và controllers
- Địa chỉ: Hồ Chí Minh
- Facebook: Sang Nguyen