首页 > 解决方案 > 如何让 Laravel Nova 像 Fields

问题描述

我想创建用于制作字段的类,但在 Laravel Nova 中,此类称为 likeText::make()->placeholder()等。这意味着该类中的方法是静态的。

这是我的字段类:

class Field
{
   private $field = [];

   public function set($key, $value)
   {
      $this->field[$key] = $value;
   }

   public function get()
   {
      return $this->field;
   }
}

class Text
{
   private static $field;

   public static function make($name)
   {
      self::$field = new Field;

      self::$field->set('@saturn_type', 'string');
      self::$field->set('@saturn_key', $name);
      self::$field->set('@saturn_field', 'text');

      return new Text;
   }

   public function placeholder($value)
   {
      self::$field->set('placeholder', $value);
      return $this;
   }

   public function required()
   {
      self::$field->set('required', true);
      return $this;
   }

   public function translate()
   {
      self::$field->set('translate', true);
      return $this;
   }

   public function wysiwyg()
   {
      self::$field->set('wysiwyg', true);
      return $this;
   }

   public function get()
   {
      return (array) self::$field->get();
   }
}

这就是我所说的:

$fields = [
    Text::make('name')->placeholder('Full Name'),
    Text::make('email')->placeholder('Email'),
    Text::make('password')->placeholder('Password'),
]

$lastArray = $fields->map(function ($field) {
      return $field->get();
   }
);

但是当我为此数组中的每个项目调用 get() 方法来获取数组时,每个项目都返回最后一个项目的名称和占位符,因为它是静态的。我该如何解决这个问题。

标签: phplaravelclassstatic

解决方案


我找到了解决方案。实际上我的朋友 Nijat 发现 ))

class Field
{
   private $field = [];

   public function set($key, $value)
   {
      $this->field[$key] = $value;
   }

   public function get()
   {
      return $this->field;
   }
}

class Text
{
   private $field;

   public function __construct($name)
   {
      $this->field = new Field;

      $this->field->set('@saturn_type', 'string');
      $this->field->set('@saturn_key', $name);
      $this->field->set('@saturn_field', 'text');
   }

   public static function make($name)
   {
      return new Text($name);
   }

   public function placeholder($value)
   {
      $this->field->set('placeholder', $value);
      return $this;
   }

   public function required()
   {
      $this->field->set('required', true);
      return $this;
   }

   public function translate()
   {
      $this->field->set('translate', true);
      return $this;
   }

   public function wysiwyg()
   {
      $this->field->set('wysiwyg', true);
      return $this;
   }

   public function get()
   {
      return (array) $this->field->get();
   }
}

您只需要创建构造函数,然后在静态方法中调用它。


推荐阅读