ralphjsmit / laravel-filament-seo
一个结合Laravel SEO和Filament Admin强大功能的包。
1.4.0
2024-08-30 10:38 UTC
Requires
- php: ^8.0
- filament/filament: ^3.0
- illuminate/contracts: ^9.52|^10.0|^11.0
- ralphjsmit/laravel-seo: ^1.6.2
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- doctrine/dbal: ^3.8
- nesbot/carbon: ^2.66|^3.0
- nunomaduro/collision: ^6.1|^7.0|^8.0
- orchestra/testbench: ^7.0|^8.0|^9.0
- pestphp/pest: ^1.21|^2.0
- pestphp/pest-plugin-laravel: ^1.1|^2.0
- phpunit/phpunit: ^9.5|^10.5
- spatie/laravel-ray: ^1.26
README
结合Laravel SEO和Filament PHP的功能。
本包是使用laravel-seo包的便捷助手,与Filament Admin和表单一起使用。
它提供了一个简单的组件,返回一个Filament字段组,用于修改SEO模型的
seo()
关系,因此可以在任何地方使用,无需额外配置!
use Filament\Resources\Form; use RalphJSmit\Filament\SEO\SEO; public static function form(Form $form): Form { return $form->schema([ SEO::make(), // .. Your other fields ]); }
以下是一个SEO
组件的示例
安装
首先,安装包
composer require ralphjsmit/laravel-filament-seo
这将需要安装ralphjsmit/laravel-seo
,如果您尚未安装。请确保查看主包的文档并配置特殊seo.php
配置文件中的值!
接下来,确保您正在编辑的Eloquent模型使用了HasSEO
特质
class Post extends Model { use HasSEO; }
现在,SEO::make()
助手在任何地方都可以使用。以下是一些如何使用它的示例
在Filament Admin中
这是在经典Filament Admin中使用本包的示例。
它适用于创建和编辑帖子
<?php namespace App\Filament\Resources; use App\Filament\Resources; use App\Models\Post; use Filament\Forms\Components\TextInput; use Filament\Resources\Form; use Filament\Resources\Resource; use Filament\Resources\Table; use RalphJSmit\Filament\SEO\SEO; class PostResource extends Resource { protected static ?string $model = Post::class; protected static ?string $slug = 'posts'; protected static ?string $recordTitleAttribute = 'title'; protected static ?string $navigationGroup = 'Blog'; protected static ?string $navigationIcon = 'heroicon-o-document-text'; protected static ?int $navigationSort = 0; public static function form(Form $form): Form { return $form->schema([ TextInput::make('title'), SEO::make(), ]); } public static function table(Table $table): Table { return $table->columns([ /* */ ]); } public static function getPages(): array { return [ 'index' => Resources\PostResource\Pages\ListPosts::route('/'), 'create' => Resources\PostResource\Pages\CreatePost::route('/create'), 'edit' => Resources\PostResource\Pages\EditPost::route('{record}/edit'), ]; } }
与Filament Forms一起使用
您还可以使用本包与独立的Filament Forms包一起使用。
以下是一个简单的示例,说明如何设置一个创建新帖子的Livewire组件。在这个例子中,我将SEO
组件包裹在一个Card中。
<?php namespace App\Http\Livewire; use App\Models\Post; use Filament\Forms\Components\Card; use Filament\Forms\Components\TextInput; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Model; use Livewire\Component; use RalphJSmit\Filament\SEO\SEO; class CreatePost extends Component implements HasForms { use InteractsWithForms; public array $data = []; public function mount(): void { $this->form->fill(); } public function render(): View { return view('livewire.create-post'); } protected function getFormSchema(): array { return [ TextInput::make('title'), Card::make([ SEO::make() ]), ]; } protected function getFormStatePath(): ?string { return 'data'; } protected function getFormModel(): Model|string|null { return Post::class; } public function submitForm() { $post = Post::create($this->form->getState()); /** Do not forget this step. */ $this->form->model($post)->saveRelationships(); } }
以下是一个编辑帖子的Livewire组件的示例
<?php namespace App\Http\Livewire; use App\Models\Post; use Filament\Forms\Components\TextInput; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Model; use Livewire\Component; use RalphJSmit\Filament\SEO\SEO; use RalphJSmit\Filament\SEO\Tests\Fixtures\Models\Post; class EditPost extends Component implements HasForms { use InteractsWithForms; public Post $post; public function mount(): void { $this->form->fill([ 'title' => $this->post->title, ]); } public function render(): View { return view('livewire.edit-post'); } protected function getFormSchema(): array { return [ TextInput::make('title'), SEO::make(), ]; } protected function getFormModel(): Model|string|null { return $this->post; } public function submitForm() { $this->post->update( $this->form->getState(), ); } }
通用
🐞 如果您发现一个错误,请提交详细的问题,我会尽快修复。
🔐 如果您发现一个漏洞,请查看我们的安全策略。
🙌 如果您想做出贡献,请提交拉取请求。所有PR都将得到充分认可。如果您不确定我会不会接受您的想法,请随时联系我!
🙋♂️ Ralph J. Smit