ibrostudio / filament-dynamic-resource-children
允许 Filament 插件开发者注册在应用程序级别或另一个插件中存在的资源中的页面或关系管理器
v1.0.0
2022-06-10 18:00 UTC
Requires
- php: ^8.1
- filament/filament: ^2.12
- illuminate/contracts: ^9.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- ibrostudio/filament-plugin-tools: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-mock: ^1.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-09 04:29:10 UTC
README
此包允许 Filament 插件开发者注册在应用程序级别或另一个插件中存在的资源中的页面或关系管理器。
安装
您可以通过 composer 安装此包
composer require ibrostudio/filament-dynamic-resource-children
用法
准备您的资源
将特质 CanHaveDynamicChildren
添加到您的资源类中。
use IBroStudio\FilamentDynamicResourceChildren\Concerns\HasDynamicChildren; class ExampleParentResource extends Resource { use HasDynamicChildren; }
然后,在那个资源类中,修改 getRelations()
和 getPages()
方法
之前
public static function getRelations(): array { return []; } public static function getPages(): array { return [ 'index' => Pages\ListExampleParents::route('/'), 'create' => Pages\CreateExampleParent::route('/create'), 'view' => Pages\ViewExampleParent::route('/{record}'), 'edit' => Pages\EditExampleParent::route('/{record}/edit'), ]; }
之后
public static function getRelations(): array { return array_merge( [], self::getDynamicRelationManagers() ); } public static function getPages(): array { return array_merge( [ 'index' => Pages\ListExampleParents::route('/'), 'create' => Pages\CreateExampleParent::route('/create'), 'view' => Pages\ViewExampleParent::route('/{record}'), 'edit' => Pages\EditExampleParent::route('/{record}/edit'), ], self::getDynamicPages() ); }
将您的子项与其父项链接起来
在您的插件中像往常一样创建您的页面或关系管理器。
然后在您的插件服务提供者中注册它,如下所示
use App\Filament\Resources\ExampleParentResource; use Filament\PluginServiceProvider; use Spatie\LaravelPackageTools\Package; use VendorName\MyPlugin\Filament\Resources\ExampleParentResource\Pages\MyFirstPage; use VendorName\MyPlugin\Filament\Resources\ExampleParentResource\Pages\MySecondPage; use VendorName\MyPlugin\Filament\Resources\ExampleParentResource\RelationManagers\MyFirstRelationManager; use VendorName\MyPlugin\Filament\Resources\ExampleParentResource\RelationManagers\MySecondRelationManager; class MyPluginServiceProvider extends PluginServiceProvider { protected array $pages = [ MyFirstPage::class, MySecondPage::class, ]; protected array $relationManagers = [ MyFirstRelationManager::class, MySecondRelationManager::class, ]; public function configurePackage(Package $package): void { $this->packageConfiguring($package); $package ->name('my-plugin') ->hasViews(); } public function packageRegistered(): void { parent::packageRegistered(); $this->app->resolving('filament', function () { ExampleParentResource::addDynamicPages([ 'first-page-key' => [ 'class' => MyFirstPage::class, 'route' => '/first-page-slug' ], 'second-page-key' => [ 'class' => MySecondPage::class, 'route' => '/second-page-slug' ], ]); ExampleParentResource::addDynamicRelationManagers([ MyFirstRelationManager::class, MySecondRelationManager::class, ]); }); } }
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
- iBroStudio
- The Filament team,感谢他们的工作
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件