如何获取当前Laravel Filament资源页面类型(操作)创建/编辑/查看

问题描述 投票:0回答:2

我需要根据当前页面类型index/create/edit/view自定义一些Laravel Filament v3资源表单

字段/元素
。例如,隐藏视图页面上的某些操作字段

资源PHP文件(栏)

<?php
namespace App\Filament\Resources;

use App\Filament\Resources\BarResource\Pages;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;

class BarResource extends \Filament\Resources\Resource
{
    public static function getPages(): array
    {
        return [
            'index' => Pages\ListBars::route('/'),
            'create' => Pages\CreateBar::route('/create'),
            'edit' => Pages\EditBar::route('/{record:uuid}/edit'),
            'view' => Pages\ViewBar::route('/{record:uuid}/view'),
        ];
    }
    
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('name')
                    ->hidden(function () {
                        //do something in cases of edit/view states, something like $state
                        /*switch ($state) {
                            case 'view':
                                return true;
                                break;
                        }*/
                    }),
            ]);
    }
}

有什么想法如何在表单中实现切换(获取当前)资源页面类型吗?

laravel forms laravel-filament
2个回答
1
投票

很高兴您解决了问题,很高兴看到通过灵活的方法实现这一目标。

另一方面,Filament 有两种可用的方法。

第一

->hidden(fn($operation) => $operation == 'view')

->visible(fn($operation) => $operation == 'edit')

文档

阅读更多内容

第二个

->hiddenOn('edit')

->visibleOn('create')

Doc

阅读更多内容

0
投票

💡我有一个解决问题的想法。

下面的示例基于

edit
上下文/操作。 ⚠️ 记住你还必须用
create/view/index
上下文
来完成它。让我们创建一个公共属性
$crud
来确定给定资源类支持哪个上下文/操作。

1️⃣ 通过中产阶级

  1. CreateRecord
    班级

    \App\Override\Filament\Resources\Pages\CreateRecord

  2. EditRecord
    班级

    \应用程序\覆盖\灯丝\资源\页面\编辑记录

  3. ViewRecord
    班级

    \应用程序\覆盖\灯丝\资源\页面\ViewRecord

  4. ListRecords
    班级

    \应用程序\覆盖\灯丝\资源\页面\ListRecords

EditRecord 子类

app\Override\Filament\Resources\Pages\EditRecord.php

<?php
namespace App\Override\Filament\Resources\Pages;

use Filament\Resources\Pages\EditRecord as BaseEditRecord;

class EditRecord extends BaseEditRecord
{
    public string $crud = 'edit';
}

栏编辑

app\Filament\Resources\BarResource\Pages\EditBar.php

<?php
namespace App\Filament\Resources\BarResource\Pages;

use App\Override\Filament\Resources\Pages\EditRecord;

class EditBar extends EditRecord
{
    //your edit resource code
}

2️⃣ 通过特质

  1. CreateRecord
    特质

    \App\Traits\Filament\Resources\Pages\CreateRecord

  2. EditRecord
    特质

    \App\Traits\Filament\Resources\Pages\EditRecord

  3. ViewRecord
    特质

    \App\Traits\Filament\Resources\Pages\ViewRecord

  4. ListRecords
    特质

    \App\Traits\Filament\Resources\Pages\ListRecords

编辑记录特征

app\Traits\Filament\Resources\Pages\EditRecord.php

<?php

namespace App\Traits\Filament\Resources\Pages;

trait EditRecord
{
    public $crud = 'edit';
}

栏编辑

app\Filament\Resources\BarResource\Pages\EditBar.php

<?php
namespace App\Filament\Resources\BarResource\Pages;

use Filament\Resources\Pages\EditRecord;

class EditBar extends EditRecord
{
    //our trait
    use \App\Traits\Filament\Resources\Pages\EditRecord;
    
    //your edit resource code
}

💯结果💎

酒吧资源

app\Filament\Resources\BarResource.php

现在您可以切换

$form->getLivewire()->crud
来获取当前表单上下文/操作。

<?php
namespace App\Filament\Resources;

use Filament\Forms\Form;
use Filament\Resources\Resource;

class BarResource extends Resource
{
    //your code...
    
    public static function form(Form $form): Form
    {
        $context = $form->getLivewire()->crud;
        return $form
            ->schema([
                TextInput::make('name')
                    ->hidden(function () use ($context) {
                        switch ($context) {
                            case 'edit':
                                //code for edit
                                break;
                            case 'view':
                                //code for view
                                break;
                        }
                    }),
            ]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.