• Bỏ qua primary navigation
  • Skip to main content
  • Bỏ qua primary sidebar

Thủ thuật thiết kế website

Chia sẻ kinh nghiệm thiết kế website

  • Trang chủ
  • Joomla
    • Thủ thuật Joomla
    • Joomla Extensions
    • Joomla Themes
  • WordPress
    • Thủ thuật WordPress
    • WordPress Plugins
    • WordPress Themes
  • PHP Framework
    • Codeigniter
    • Laravel
    • Laminas
  • App Developer
    • React Native
    • Flutter
  • SEO
  • Chia sẻ
  • Phần mềm
Bạn đang ở:Trang chủ / PHP Framework / Laravel / [Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P3: khai báo config, translation, helpers và migrations

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P3: khai báo config, translation, helpers và migrations

21/09/2024 - Administrator Để lại bình luận

Tại phần 2, chúng ta đã tìm hiểu được cách tạo Package với đầy đủ các thành phần cơ bản như Route và cấu trúc MVC. Tại phần 3 này chúng ta sẽ tiếp tục với các thành phần cơ bản và quan trọng khác mà một Package cần có.

Mình sẽ lại tiếp tục đặt cấu trúc thư mục dưới đây để mọi người có thể hình dung lại cấu trúc của package đã được tạo từ 2 phần trước:

packages
├── demo
│   ├── configs
│   │   └── demo.php
│   ├── helpers
│   │   └── functions.php
│   ├── migrations
│   ├── resources
│   │   └── assets
│   │   └── lang
│   │   └── views
│   ├── routes
│   │   └── routes.php
│   ├── src
│   │   └── Commands
│   │   └── Http
│   │   |   └── Controllers
│   │   |   |   └── DemoController.php
│   │   |   └── Middlewares
│   │   └── Models
│   │   |   └── Demo.php
│   │   └── Providers
│   │   |   └── DemoServiceProvider.php
│   ├── composer.json
│   ├── Readme.md
├── demo2
│   ├── ...

1. Config

Config tại package được dùng để cấu hình và định nghĩa các giá trị có sử dụng tại Package. Tính năng và công dụng của file Config tại Package giống với các file Config mặc định. Và để khai báo chúng ta sẽ khai báo tại hàm Boot ở DemoServiceProvider:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot route
    if (File::exists($modulePath."routes/routes.php")) {
        $this->loadRoutesFrom($modulePath."/routes/routes.php");
    }
    ...

}
...

2. Translation

Ngày nay, đa phần các website đều sử dụng đa ngôn ngữ để có thể dễ dàng tiếp cận và đáp ứng nhiều nhu cầu của nhiều loại khách hàng. Như chúng ta đã biết thì các vấn đề về đa ngôn ngữ trong Laravel được hỗ trợ và giải quyết cực kỳ dễ dàng.

Để có thể sử dụng đa ngôn ngữ tại package thì chúng ta có thể khai báo theo 2 dạng:

2.1 Khai báo file có đuôi là php

Chúng ta sẽ tạo 2 file php theo ngôn ngữ với cấu trúc và nội dung dung sau:

/ Khai báo đa ngôn ngữ với bản tiếng anh
// packages/demo/resources/lang/en/demo.php

<?php

return [
    'name' => 'Demo',
];
// Khai báo đa ngôn ngữ với bản tiếng việt
// packages/demo/resources/lang/vi/demo.php

<?php

return [
    'name' => 'Ví dụ',
];

Tiếp đến chúng ta sẽ khai báo tại DemoServiceProvider:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot languages
    if (File::exists($modulePath . "resources/lang")) {
        $this->loadTranslationsFrom($modulePath . "resources/lang", $moduleName);
    }
    ...

}
...

Vậy là xong, để sử dụng thì chúng ta chỉ cần gọi trans(‘Demo::demo.name’) hoặc __(‘Demo::demo.name’) với Demo chính là $moduleName.

2.2 Khai báo file có đuôi là json

Chúng ta sẽ tạo file json theo ngôn ngữ với cấu trúc và nội dung dung sau:

// Khai báo đa ngôn ngữ với bản tiếng anh
// packages/demo/resources/lang/en.json

{
	"Đây là Demo 1": "This is Demo 1",
	"Đây là Demo 2": "This is Demo 2"
}

Tiếp đến chúng ta sẽ khai báo tại DemoServiceProvider:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot languages
    if (File::exists($modulePath . "resources/lang")) {
        $this->loadJSONTranslationsFrom($modulePath . 'resources/lang');
    }
    ...

}
...

Để sử dụng thì chúng ta chỉ cần gọi trans(‘Đây là Demo 1’) hoặc __(‘Đây là Demo 1’).

2.3 Khai báo cả 2 dạng

Để có thể đa dạng phương thức nhập ngôn ngữ chúng ta có thể sử dụng cả 2 dạng trên bằng cách khai báo như sau:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot languages
    if (File::exists($modulePath . "resources/lang")) {
        $this->loadTranslationsFrom($modulePath . "resources/lang", $moduleName);
        $this->loadJSONTranslationsFrom($modulePath . 'resources/lang');
    }
    ...

}
...

3. Helpers

Chúng ta có thể tự định nghĩa các Helper của riêng mình tại “packages/demo/helpers/functions.php”. Lưu ý tên file không nhất thiết phải là functions.php nhé.

Chúng ta sẽ khai báo Helpers tại hàm Boot:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot all helpers
    if (File::exists($modulePath . "helpers")) {
        // Lây thông tin file tại thư mục helpers
        $helper_dir = File::allFiles($modulePath . "helpers");
        // Khai báo helpers
        foreach ($helper_dir as $key => $value) {
            $file = $value->getPathName();
            require $file;
        }
    }
    ...

}
...

Như vậy là chúng ta đã có thể sử dụng Helper do chính mình định nghĩa rồi.

4. Migrations

Hẳn chúng ta không còn xa lạ gì mới migrations rồi. Để có thể tạo 1 file migrations tại packages chúng ta có thể sử dụng command sau:

php artisan make:migration create_demo_table --path=packages/demo/migrations

Cuối cùng để khai báo migrations tại package chúng ta sẽ tiếp tục khai báo tại hàm boot của DemoServiceProvider:

// /packages/demo/src/Providers/DemoServiceProvider.php

...
public function boot()
{
    $modulePath = __DIR__.'/../../';
    $moduleName = 'Demo';

    ...
    // boot migration
    if (File::exists($modulePath . "migrations")) {
        $this->loadMigrationsFrom($modulePath . "migrations");
    }
    ...

}
...

Lúc này chúng ta có thể sử dụng command “php artisan migrate” để có thể chạy các migrations chúng ta đã định nghĩa rồi.

Tổng Kết

Như vậy là chúng ta đã cùng nhau tìm hiểu được các thành phần cơ bản của một package, với các thành phần này chúng ta đã có thể tạo ra những package phục vụ cho các dự án sau này rồi. Có cơ bản thì sẽ có nâng cao, ở bài viết sau chúng ta sẽ tiếp tục cùng nhau tìm hiểu một vài kiến thức nâng cao khi xây dựng một package. Cụ thể ở bài viết sau chúng ta sẽ cùng tìm hiểu về: Commands, Middlewares và Publish. Mình hi vọng bài viết này giúp ích được cho mọi người.

Nguyễn Viết Hiếu

Nguồn : https://sudo.vn

0 0 đánh giá
Article Rating
Theo dõi
Đăng nhập
Thông báo của
guest
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Sidebar chính

LỜI NGỎ

Đây là blog cá nhân, cung cấp các thông tin, kiến thức và kinh nghiệm về lập trình và cuộc sống. Những bài viết được mình sưu tập từ nhiều nguồn, mọi chi tiết liên quan đến bản quyền xin vui lòng liên hệ qua email kairu2607@gmail.com ! Cám ơn rất nhiều.

Tìm kiếm

Thủ thuật Wordpress

T

Tạo trang chuyển hướng download cho WordPress

[flatsome ] Text Ticker (fade) For Top Bar In Flatsome Theme

[Flatsome] Text Ticker (Fade) for Top Bar in Flatsome Theme

Định Dạng ảnh Webp Là Gì ? Làm Thế Nào để Sử Dụng Webp Trên Wordpress 2024 Mới Nhất ?

Định dạng ảnh WebP là gì ? Làm thế nào để sử dụng WebP trên WordPress 2024 mới nhất ?

X

Xử Lý Lỗi Không Xem Được Giỏ Hàng Và Thanh Toán Woocommerce Website WordPress

Vì Sao Rank Math Vượt Trội – SEO WordPress 2023

Hướng Dẫn Ghi đè (override) Folder Inc Trong Child Theme Flatsome

Hướng dẫn ghi đè (override) folder INC trong child-theme Flatsome

Hướng Dẫn Quản Lý Trang Trong Website WordPress

Laravel

Một số câu hỏi câu hỏi phổ biến phỏng vấn tuyển dụng lập trình viên Laravel

Thiết kế cấu trúc folder HMVC cho Laravel

Tại sao lại sử dụng Laravel Service và Repository Pattern?

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P3: khai báo config, translation, helpers và migrations

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P2: Route và mô hình MVC

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P1: Giới thiệu và khởi tạo cấu trúc thư mục cơ bản

Codeigniter Framework

[CodeIgniter 4] Codeigniter 4 Remove Public and Index.php From URL

[CodeIgniter 4] How to upload Codeigniter 4 website on share hosting?

Sửa lỗi website Codeigniter 2.x không chạy được với PHP 7.x

[CodeIgniter 4] Sử dụng cURL trong CodeIgniter 4

[CodeIgniter 4] Sử dụng cache để tăng tốc website trong CodeIgniter 4

[CodeIgniter 4] Xử lý hình ảnh chuyên nghiệp trong CodeIgniter 4

[CodeIgniter 4] Hướng dẫn gửi mail trong CodeIgniter 4

Dịch vụ Thiết Kế Website

Phần mềm hay

Hướng dẫn chuyển đổi php version trong ~/.zshrc ở MacOs

Tim Hieu Ve He Dieu Hanh Macos 1

Sửa file Hosts trong hệ điều hành MacOS

Hướng dẫn sử dụng phần mềm putty trên Windows

Switching between multiple PHP versions on macOS

Byebye Edge Chromium/Microsoft Edge

Copyright © 2025 · Metro Pro on Genesis Framework · WordPress · Đăng nhập

wpDiscuz