Package trong Laravel - hướng dẫn tạo Package cụ thể

04/01/2022   Laravel

Package trong Laravel - hướng dẫn tạo Package cụ thể

Package trong Laravel - hướng dẫn tạo Package cụ thể

Ví dụ tạo package vdmot cho Laravel 5.8

B1. Tạo thư mục package vendor/phonglg/vdmot/src

B2. Tạo file composer.json trong thư mục package vendor/phonglg/vdmot/ bằng cách mở Cmd lên gõ lệnh

composer init

nhập thông tin cho file composer.json

Bạn sẽ có file composer.json với nội dung sau

{
    "name": "phonglg/sample",
    "description": "this is first package",
    "authors": [
        {
            "name": "phonglg",
            "email": "phong2018@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

B3. Load các file trong package lên ứng dụng Laravel của bạn bằng cách mở file composer.js trong thư muc gốc, và thêm namespace

"autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/",
            "Phonglg\\Vdmot\\": "vendor/phonglg/vdmot/src"
        }
    },

B4. Chạy lệnh để composer nhận namespace mới (chạy tại thư mục gốc)

* Lệnh này rất quan trọng vì nó khai báo với laravel Package của bạn nằm ở thư mục nào.

composer dumpautoload

B5. Tạo file router.php trong thu mục vendor/phonglg/vdmot/src với nội dung

<?php

Route::get('sampleusers', 'Phonglg\Vdmot\VdmotController@index');

?>

B6. Tạo Service Provider, bằng cách tạo file VdmotServiceProvider.php trong thư mục vendor/phonglg/vdmot/src. Sử dụng file Route vừa tạo bước 4.

<?php
namespace Phonglg\Vdmot;
use Illuminate\Support\ServiceProvider;
class VdmotServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->loadViewsFrom(__DIR__.'/views', 'simple_views');
        if (! $this->app->routesAreCached()) {
            require __DIR__.'/router.php';
        }
    }
    public function register()
    {

        //
    }
}
?>

B7. Tạo View - Tạo thư mục : views trong thư mục vendor/phonglg/vdmot/src, tạo file admin.blade.php trong thư mục views với nội dung

<div class="container">
<h1>You have {{count($users)}} user(s)</h1>
<div class="col-md-8">
<ul class="list-group">
@foreach($users as $user)
<li class="list-group-item">{{$user->username}}</li>
 @endforeach </ul>
</div>
</div>

B8. Tạo controller cho package bằng cách thêm một file VdmotController.php vào thư mục vendor/phonglg/vdmot/src:

Sử dụng file views vừa tạo ở trên

<?php
namespace Phonglg\Vdmot;
use App\Http\Controllers\Controller;
use App\User;
class VdmotController extends Controller {
  public function __construct() {
    // $this->middleware('auth');
  }
  public function index()
  {
    $users = User::all();
    return view('simple_views::admin')->with('users', $users);
  }
}
?>

B9. Đăng ký service provider để sử dụng trong toàn bộ app như sau: vào file config/app.php thêm vào dòng sau:

* Đăng ký này rất quan trọng, nó khai báo với laravel bạn sẽ sử dụng package này.

 'providers' => [

    /*

         * Application Service Providers...

         */

        

        Illuminate\View\ViewServiceProvider::class,
        Illuminate\Auth\AuthServiceProvider::class,
        Phonglg\Vdmot\VdmotServiceProvider::class,

]

B10. Đến đây ta đã được một package có thể chạy được thông qua đường dẫn: 

localhost/sampleusers

 

Kết luận về sử dụng Package

Để sử dụng Package có sẵn bạn cần

1. Chỉnh file Composer để đăng ký Namspace mới

2. Đăng ký service provider để sử dụng trong toàn bộ app, bằng cách vào file config/app.php

Bài viết cùng chủ đề