我们试着直接在Select中输入新的演员
点击保存
如何实现随时在Select中输入新的演员。我们将采用Ajax方式完成,在提交保存视频之前,通过Ajax方式实现提前于保存视频之前,保存演员信息。这样就不会出现上述的错误。
File:pluginsraiseinfomoviesformwidgetsActorbox.php
public function getSaveValue($actors)
{
dd($actors);
return $actors;
}
利用Chrome的开发工具-选择network,提交表单,我们可以看见getSaveValue函数获得传入的参数及其内部数据结构,可以看出是一个数组,而且传递的是输入的文本,而不是id
下面我们针对新输入的值进行处理
首先先建立一个数组,newArray,判断值是否是数字,如果是数字就保存到newArray中,如果不是数字,则需要新建一个Actor,这里我们模拟一个name和lastname,保存这个actor,然后把保存的这个actor的id放到newArray中:
File:pluginsraiseinfomoviesformwidgetsActorbox.php
public function getSaveValue($actors)
{
// 声明一个数组
$newArray = [];
foreach($actors as $actorID){
// 检查是否是数字
if(!is_numeric($actorID)){
// 如果不是数字,则新建一个actor
$newActor = new Actor;
$newActor->name = 'John';
$newActor->lastname = 'Gusak';
$newActor->save();
// 并将新建的actor的id放入新的数组
$newArray[] = $newActor->id;
} else {
$newArray[] = $actorID;
}
}
dd($newArray);
return $actors;
}
保存表单后,我们可以发现,传入的数组里面最后就是新插入的actor了。
我们再在数据库中确认一下
下面,我们对输入的用户姓名进行分离。
File:pluginsraiseinfomoviesformwidgetsActorbox.php
public function getSaveValue($actors)
{
// 声明一个数组
$newArray = [];
foreach($actors as $actorID){
// 检查是否是数字
if(!is_numeric($actorID)){
// 如果不是数字,则新建一个actor
$newActor = new Actor;
$nameAndLastname = explode(' ',$actorID);
$newActor->name = $nameAndLastname[0];
$newActor->lastname = $nameAndLastname[1];
$newActor->save();
// 并将新建的actor的id放入新的数组
$newArray[] = $newActor->id;
} else {
$newArray[] = $actorID;
}
}
// dd($newArray);
return $newArray;
}
刷新页面,添加新的演员,试着输入“洪涛 李”,提交表单,就可以保存了。
但是,这个功能有个明显的缺陷,就是如果你提交多次,这个新的演员,就会重复提交多个新的。只是他们的id不一样。这个问题其实很好解决,就是先判断是否有重名的演员就可以了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。