php - 如何让 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() 方法来获取数组时,每个项目都返回最后一个项目的名称和占位符,因为它是静态的。我该如何解决这个问题。
解决方案
我找到了解决方案。实际上我的朋友 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();
}
}
您只需要创建构造函数,然后在静态方法中调用它。
推荐阅读
- java - 通过 FasterXML-Jackson 反序列化 Codehaus-Jackson 注释的类实体?
- android - Android Native Preview 与 Real Preview 不同
- c - 在结构数组中导航并存储无法正常工作的值
- c# - 两个查询之间的区别
- ios - 隐藏另一个类的按钮
- reactjs - ReactJS:图像未呈现
- c# - 我定义的 UserControl 导致 VS2019 崩溃
- ruby-on-rails - 根据使用 ReactBootstrap 的路由设置导航项的活动状态
- reactjs - 如何解决 React 中的“超出最大更新深度”(设置状态)
- jenkins - 无法在詹金斯中安装部署到容器插件