mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
Refactored fieldsets
This commit is contained in:
@@ -6,16 +6,6 @@ use Filament\Support\Livewire\FormComponent;
|
||||
|
||||
class UserEdit extends FormComponent
|
||||
{
|
||||
public function fields()
|
||||
{
|
||||
return $this->getFieldset(__FILE__)::fields($this->model);
|
||||
}
|
||||
|
||||
public function rulesIgnoreRealtime()
|
||||
{
|
||||
return $this->getFieldset(__FILE__)::rulesIgnoreRealtime();
|
||||
}
|
||||
|
||||
public function success()
|
||||
{
|
||||
$input = collect($this->form_data);
|
||||
|
||||
@@ -5,16 +5,18 @@ namespace Filament\Support\Livewire;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Livewire\Component;
|
||||
use Filament\Traits\Fields\FollowsRules;
|
||||
use Filament\Traits\Fields\HasFields;
|
||||
use Filament\Traits\Fields\FollowsRules;
|
||||
use Filament\Traits\Fields\HandlesFiles;
|
||||
use Filament\Traits\Fields\HandlesArrays;
|
||||
use Filament\Contracts\Fieldset;
|
||||
|
||||
class FormComponent extends Component
|
||||
{
|
||||
use HasFields, FollowsRules, HandlesFiles, HandlesArrays;
|
||||
|
||||
public $model;
|
||||
public $fieldset;
|
||||
public $form_data;
|
||||
public $goback;
|
||||
|
||||
@@ -25,15 +27,34 @@ class FormComponent extends Component
|
||||
|
||||
public function mount($model = null, $goback = null)
|
||||
{
|
||||
$this->setFormProperties($model);
|
||||
$this->model = $model;
|
||||
$this->goback = $goback;
|
||||
|
||||
$this->setFieldset();
|
||||
$this->setFormProperties();
|
||||
}
|
||||
|
||||
public function setFormProperties($model = null)
|
||||
public function setFieldset()
|
||||
{
|
||||
$this->model = $model;
|
||||
if ($model) {
|
||||
$this->form_data = $model->toArray();
|
||||
$className = (new \ReflectionClass(get_called_class()))->getShortName();
|
||||
$fieldsetName = $className.'Fieldset';
|
||||
foreach(config('filament.namespaces.fieldsets') as $namespace) {
|
||||
$class = $namespace.'\\'.$fieldsetName;
|
||||
if (class_exists($class)) {
|
||||
if (!in_array(Fieldset::class, class_implements($class))) {
|
||||
throw new \Error($class.' must implement '.Fieldset::class);
|
||||
}
|
||||
|
||||
$this->fieldset = $class;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function setFormProperties()
|
||||
{
|
||||
if ($this->model) {
|
||||
$this->form_data = $this->model->toArray();
|
||||
}
|
||||
|
||||
foreach ($this->fields() as $field) {
|
||||
|
||||
@@ -33,6 +33,6 @@ trait FollowsRules
|
||||
|
||||
public function rulesIgnoreRealtime()
|
||||
{
|
||||
return [];
|
||||
return $this->fieldset ? $this->fieldset::rulesIgnoreRealtime() : [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,31 +2,11 @@
|
||||
|
||||
namespace Filament\Traits\Fields;
|
||||
|
||||
use Filament\Contracts\Fieldset;
|
||||
|
||||
trait HasFields
|
||||
{
|
||||
public function fields()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public function getFieldset($path)
|
||||
{
|
||||
$className = basename($path, '.php').'Fieldset';
|
||||
foreach(config('filament.namespaces.fieldsets') as $namespace) {
|
||||
$class = $namespace.'\\'.$className;
|
||||
|
||||
if (class_exists($class)) {
|
||||
if (!in_array(Fieldset::class, class_implements($class))) {
|
||||
throw new \Error($class.' must implement '.Fieldset::class);
|
||||
}
|
||||
|
||||
return $class;
|
||||
}
|
||||
}
|
||||
|
||||
throw new \Error($className.' not found.');
|
||||
return $this->fieldset ? $this->fieldset::fields($this->model) : [];
|
||||
}
|
||||
|
||||
public function getField($field_name)
|
||||
|
||||
Reference in New Issue
Block a user