大数跨境

Laravel 模块化 [注释]

Laravel 模块化 [注释] 索引目录
2025-08-13
4
导读:关注【索引目录】服务号,更多精彩内容等你来探索!这是一个关于 Laravel 模块化设计的基础知识。

关注【索引目录】服务号,更多精彩内容等你来探索!

这是一个关于 Laravel 模块化设计的基础知识。在研究期间,Laravel 的目标配置必须允许我使用建筑设计的技巧。有关如何配置的信息,请参阅以下信息,然后将其描述为敏捷过程。

在介绍模块化的内容时,您可以了解有关设计和实用程序的信息。 Como isso aqui é um subproduto dos meus estudos, tem muita coisa sobre or Laravel que acabei aprendendo durante o processo. Pode parecer óbvio para você,mas não para o “eu” do passado。

Já adianto:我的目标是在研究期间考虑相关的问题。 Para você, talvez pareçam “informações jogadas”, mas eu geralmente estudo apartir de palavras-chave ou topicos, usando-os como ponto departida para outras pesquisas (Google, YouTube e artigos).其实,这并不是一个假装的未来故事。

免责声明

请使用 IA 组织作为主题和目录的详细说明。我的研究过程中,我们将提供一些要点,以帮助您组织工作。

目录

  • 1. 模块配置

    • 1.1. 自动加载(PSR-4)
    • 1.2. 服务提供商
    • 1.3. 睾丸模块


  • 2. 模型、工厂和 DTO

    • 2.1. Conectando 工厂和模型
    • 2.2. 行动
    • 2.3.模型状态定义
    • 2.4. 数据传输对象(DTO)


  • 3. IDE 助手

    • 3.1. 安装和使用
    • 3.2. Composer 脚本


  • 4. 模块化视图

    • 4.1. 正常景观
    • 4.2. 匿名组件
    • 4.3. 等级组件


  • 5. 工具和插件

    • 5.1. Laravel 理念
    • 5.2. 打包 Laravel 模块


  • 6. 组织:Abordagens

    • 6.1. 垂直切片
    • 6.2. Agrupamento por Tipo(按类型分组)


  • 7. Padrões de Design e Boas Práticas

    • 7.1. Acoplamento Temporal 与 Eventos


  • 8. 其他主题

    • 8.1. 工厂中的序列


1. 模块配置

1.1. 自动加载(PSR-4)

使用 Laravel 进行模块化,需要先了解新模块的情况composer.json。允许自动加载功能,并确保类可以进行模块化设置。

如果你想了解更多:链接

1.2. 服务提供商

Service Provideré o coração de um módulo。 Cada 提供者主要提供基础 cada 和ServiceProviderpossui dois métodos 原则:

  • register()
    :Chamado primeiro,注册商服务和绑定。
  • boot()
    :查看register()提供商的待办事项、服务和配置功能(可轮换和查看)。

Para registrar um novo provider, ele deve ser informado no arquivo config/app.php(ou configurado para ser descobertoautomaticamente)。

Laravel 的文档,包含有关主题的信息,推荐!

1.3. 睾丸模块

使用模块化测试时,需要注册或注册模块phpunit.xml

2. 模型、工厂和 DTO

2.1. Conectando 工厂和模型

  • Por padrão,因为工厂 Procuram Pelas 没有命名空间模型App\Models
  • Para conectar uma 工厂是一个 uma 模型,定义了一个没有归属于$model工厂的模型。
  • 关于 Laravel 的详细信息,请参阅 Laravel 工厂的变更情况。使用newFactory()模型 估计方法:
use Modules\Product\Database\Factories\ProductFactory;

class Product extends Model
{
    protected static function newFactory()
    {
        return ProductFactory::new();
    }
}

了解更多:

  • Eloquent:入门
  • Eloquent:工厂

2.2. 行动

没有 Laravel,您可以使用Actionsagrupar comportamentos 和 ações 面食,类似的想法usecaseservice

2.3.模型状态定义

没有银行可以定义 SEM 模型实例的状态。示例:

public const STATUS_PENDING = 'pending';

public static function startForUser(int $userId): self
{
    return self::make([
        'user_id' => $userId,
        'status' => self::STATUS_PENDING,
    ]);
}

2.4. 数据传输对象(DTO)

Os DTOs são úteis para reduzir o acoplamento e melhorar a clareza。 Eles podem ser usados 段落:

  • 不同语言之间的通信。
  • 减少参数和方法的数量。
  • 代表 coleções de bados(收藏)。
  • 使用Eloquent 模型或集合的实例 DTO 的 方法fromEloquentModelfromEloquentCollection
class ProductDTO
{
    public function __construct(
        public readonly int $id,
        public readonly string $name,
        public readonly string $sku,
        public readonly float $price,
    ) {}

    public static function fromEloquentModel(Product $product): self
    {
        return new self(
            id: $product->id,
            name: $product->name,
            sku: $product->sku,
            price: $product->price,
        );
    }

    public static function fromEloquentCollection(Collection $products): Collection
    {
        return $products->map(fn (Product $product) => self::fromEloquentModel($product));
    }
}

了解更多:

  • PHP(Laravel)中的 DTO(数据传输对象)
  • 如何在 Laravel 中使用 DTO 实现更简洁的代码,最佳实践及实施指南

3. IDE 助手

3.1. 安装和使用

IDE Helper Generator for Laravel gera PHPDocs 可以将 IDE 作为模型的一部分。

安装:

composer require --dev barryvdh/laravel-ide-helper

Gerando PHPDocs:

  • Para o caminho padrão das 模型:
php artisan ide-helper:models
  • Para um caminho 个性化(例如:na 意大利面modules):
php artisan ide-helper:models --dir=modules

3.2. Composer 脚本

可以使用脚本号composer.json

"scripts": {
    "ide": "php artisan ide-helper:models --dir=modules"
}

使用 CLI:

composer run ide

4. 模块化视图

Para trabalhar com 查看模块,使用新注册者的resources/views方法。boot()Service Provider

class OrderServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $this->loadViewsFrom(__DIR__ . '/../../Ui/Views', 'order');
        Blade::anonymousComponentPath(__DIR__ . '/../../Ui/Views/components', 'order');
        Blade::componentNamespace('Modules\\Order\\Ui\\ViewComponents', 'order');
    }
}

4.1. 观点规范

使用loadViewsFrom()注册商的名称空间视图,进行模块间的冲突。

  • 示例:view('order::checkout')
    搜索视图Modules/Order/Ui/Views/checkout.blade.php

4.2. 匿名组件

使用Blade::anonymousComponentPath()Para registrar uma Pasta de componentes Blade anônimos。

  • PHP 协会的其他类别, apenas arquivos .blade.php
  • 例如:<x-order::alert />
     renderi Modules/Order/Ui/Views/components/alert.blade.php

4.3. 等级组件

使用Blade::componentNamespace()PHP 类组件的名称空间注册器。

  • 圣组件 criados com php artisan make:component
  • 示例:
     渲染无命名空间<x-order::checkout-summary />的类组件。CheckoutSummaryModules\Order\Ui\ViewComponents

Laravel 的基本观点:

  • 视图

5. 工具和插件

5.1. Laravel 理念

  • PHPStorm 是 Laravel 的支持插件。
  • 模块系统中,允许定义项目的模块化结构(例如:diretório modulescom 命名空间Modules)。
  • 可以使用 Laravel 的内部模块继续运行。
我不想在Laravel IDEA上使用 PHPStorm,建议使用它

5.2. 打包 Laravel 模块

  • Laravel Modules
    是一个流行的模块化项目。
  • Fornece uma estruturaorganizada para criar e gerenciar modulos。
  • Laravel IDEA possui support nativo para este pacote。

6. 组织:Abordagens

6.1. 垂直切片

  • Organiza o código agrupando por funcionalidade(例如Order > Checkout:),e não por tipo de arquivo。
  • 所有相关事项均与我们的功能有关。
  • 方便地进行可视化和操作,以实现统一的功能。

更多关于此主题的信息:

  • 探索软件架构:垂直切片
  • 垂直切片架构

6.2. Agrupamento por Tipo(按类型分组)

  • Organiza o código por tipo de arquivo(例如:模型控制器)。
  • 可以将模型事件等模块组合成一个模块化src的模型,然后继续 Laravel 的操作。

7. Padrões de Design e Boas Práticas

7.1. Acoplamento Temporal 与 Eventos

  • 问题: 时间问题
    : 时间问题: 一些问题取决于执行过程中的外部因素,可能会导致严格的执行和执行上的困难。
  • 解决方案:使用事件
    :按照具体方法执行,按责任分开。 O Fluxo prime dispara um evento e outras parts do sistema podem “escutar” e reagir de forma Independente(例如:enviar um e-mail deconfirmação ou atualizar o estoque)。

8. 其他主题

8.1. 工厂中的序列

  • LaravelSequences允许在工厂实例中更改属性值。
  • É útil para criar bado de teste com pequenas variações.
use Illuminate\Database\Eloquent\Factories\Sequence;

User::factory()
    ->count(3)
    ->state(new Sequence(
        ['name' => 'Alice'],
        ['name' => 'Bob'],
        ['name' => 'Carol'],
    ))
    ->create();

关注【索引目录】服务号,更多精彩内容等你来探索!


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读838
粉丝0
内容444