咱们试着直接在Select中输入新的演员php
点击保存数据库
如何实现随时在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.phpspa
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; }
刷新页面,添加新的演员,试着输入“洪涛 李”,提交表单,就能够保存了。3d
可是,这个功能有个明显的缺陷,就是若是你提交屡次,这个新的演员,就会重复提交多个新的。只是他们的id不同。这个问题其实很好解决,就是先判断是否有重名的演员就能够了。code