hexters / wirehmvc
用于Laravel和Livewire的HMVC概念包
1.0.0
2023-11-02 06:31 UTC
Requires
- hexters/laramodule: ^4.0
- livewire/livewire: ^3.0
README
此包是
要通过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 />