我正在开发一个基于 Web 的应用程序,技术堆栈是:VueJS,用于表示层,Laravel (PHP)用于RESTFUL API服务,以及一个名为neo4j的基于 nosql 图形的数据库 。这是问题上下文,我有一个名为Post的模型,这里定义的属性是所有帖子类型共享的,所以它们都会有它:
use NeoEloquent;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use Vinelab\NeoEloquent\Eloquent\SoftDeletes;
class Post extends NeoEloquent
{
protected $label = 'Post';
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'slug',
'body',
'status',
'image',
'published_at',
'read_time',
'isModerate',
'link',
'external_id'
];
/**
protected $hidden = ['remember_token'];
/**
* relations
*/
public function authors()
{
return $this->belongstoMany('App\User', 'AUTHOR');
}
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()->generateSlugsFrom('title')->saveSlugsTo('slug');
}
//Post type
public function contentType(){
return $this->hasOne('App\ContentType','IS_OF_TYPE');
}
}
PostType:这里的类型可以是文件、链接、事件等。例如:[name=>'Event','description'=>'description','slug'=>'event']
class PostType extends NeoEloquent
{
protected $label='ContentType';
protected $dates=['created_at','updated_at','deleted_at'];
protected $fillable=[
"name",
"description",
"slug"
];
//Ce input contentype sera associe a plusieurs input fields
public function customFields(){
return $this->belongsToMany('App\CustomField',"HAS_FIELD");
}
public function post(){
return $this->belongsToMany('App\Post','IS_OF_TYPE');
}
}
最后是CustomField模型:
class CustomField extends NeoEloquent
{
protected $label="CustomType";
protected $dates=["created_at","updated_at","deleted_at"];
protected $fillable=[
"field_name",
"field_type",
"field_order",
"validation_rules"
];
public function contentTypes(){
return $this->belongsToMany('App\CustomField','HAS_FIELD');
}
}
所以这里是流程: 1 - 在用户第一次打开帖子创建帖子表单的 UI 中,他作为模型fillable
属性中定义的要填写的公共字段Post
。为此,已经有一个表单请求进行验证,定义如下:
class StorePost extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'title' => 'required|string|min:1',
'body' => 'required',
'status' => 'required',
'image' => 'sometimes|image',
'published_at' => 'required',
'link' => 'required_if:type,==,RSS|required_if:type,==,LINK',
'external_id' => 'sometimes'
];
}
}
2 - 在同一个表单中,用户type
在 a 中有一个字段,该字段<select>
从ContentType
. 一旦他选择了一个类型,另一个就会去检索。请注意,这里的自定义字段意味着,对于一个类型字段以以下格式发送,等等。我使用这些字段属性来动态构建我的,并且一次用户填写表单并在后端服务器中发送数据:我不知道如何处理验证。我首先做的是为我的所有自定义创建一个表单请求,但我想如果不是只是拥有database(throug ajax)
Eg : Event,Link,File,...
request(ajax)
CustomField
Event
['field_name'=>'name','field_type'=>'string','field_order'=>'1',validation_rules=>'required|max:200']
PostType fields
Front-End
inputs field
Event,File and Link
Post types
我添加 20。我不会创建 20 验证规则。此时我的控制器只知道如何验证“发布”,如下所示:
public function store(StorePost $request)
{
$data = $request->validated();
...
}
我想做的是根据来自前端的数据使用新字段和新规则更新现有的 StorePost 验证。所以我不知道如何更新Form Request
我的 Requests 文件夹中的现有定义控制器,并基于来自前端的数据创建了基于前端定义和填充字段的新验证规则。我有一个想法,包括基于前端的 posttypes 获取所有 input_fields 验证规则发送给我,然后更新现有的验证规则。
注意:我定义 relashionship 的方式不同,Eloquent
因为我使用Neoloquent
的是实现neo4j
数据库。