hexters / wirehmvc

用于Laravel和Livewire的HMVC概念包

1.0.0 2023-11-02 06:31 UTC

This package is auto-updated.

Last update: 2024-08-31 00:46:25 UTC


README

Latest Stable Version Total Downloads License

此包是包的支持包,专门用于将与livewire版本3集成。

要通过Composer安装,请运行以下命令

composer require hexters/wirehmvc

安装

自动加载

默认情况下,模块类不会自动加载。您可以使用psr-4来自定义加载模块。例如

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Modules\\": "Modules/",
      "Database\\Factories\\": "database/factories/",
      "Database\\Seeders\\": "database/seeders/"
    }
  }
}

并在您项目的根目录中创建Modules目录

mkdir Modules

别忘了运行以下命令

composer dump-autoload

手动将LivewireHandleUpdateProvider添加到app.php配置文件中的提供者列表中

. . .

'providers' => ServiceProvider::defaultProviders()->merge([
    /*
    * Package Service Providers...
    */

    Hexters\Wirehmvc\LivewireHandleUpdateProvider::class, // add here

    /*
    * Application Service Providers...
    */
    App\Providers\AppServiceProvider::class,
    
    . . . 

重要提示

如果您想使用mount()钩子,请确保运行parent::mount()以调用父类,以下是一个示例。

. . .

use Hexters\Wirehmvc\Component;

. . .

class Welcome extends Component
{
  
  public function mount() {
    parent::mount();

    // Your code here...
  }
  
  public function render()
  {
      return view('admin::livewire.welcome');
  }

. . .

创建模块

按照以下命令创建模块,并在预设选项中选择Livewire!

php artisan module:make Blog

您也可以对现有模块这样做,但请记住,route.php文件将被新文件替换。

php artisan module:livewire-init --module=Blog

Artisan

php artisan module:make-livewire Counter --module=Blog
php artisan module:livewire-attribute ArticleTileAttribute --module=Blog
php artisan module:livewire-form ArticleForm --module=Blog
php artisan module:livewire-delete Counter --module=Blog

更多完整的命令可以在以下链接中查看。

Artisan文档

布局

您需要一个布局来为您的Livewire组件,您可以使用Livewire的默认布局,也可以为您的模块创建一个特定的布局。

Livewire默认命令

php artisan livewire:layout

特定模块的自定义

php artisan module:livewire-layout --name=app --module=Blog

渲染组件

只能在每个模块文件夹中的组件上渲染组件,或者您也可以查看Modules\Blog\Http\Middleware\LivewireSetupBlogMiddleware类。我假设模块名称为Blog

为了使组件能在另一个模块中使用,您需要首先注册它,打开每个模块中的提供者,以下是一个示例。

. . .

class BlogServiceProvider extends ServiceProvider
{
  . . .

  protected function defineLivewireComponents()
  {
      return [
          NabBar::class,

          // OR

          'nav-bar' => NavBar::class,
      ];
  }

每个声明的组件都将根据模块名称分配一个前缀,因此在调用它时,您需要在前面添加一个前缀,以下是一个示例。

<livewire:blog-nav-bar />