By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
October CMS - 快速入门 15 - 通过Form Widget添加新数据
2018-10-24 13:16:17    144    0    0
emengweb

我们试着直接在Select中输入新的演员

点击保存

如何实现随时在Select中输入新的演员。我们将采用Ajax方式完成,在提交保存视频之前,通过Ajax方式实现提前于保存视频之前,保存演员信息。这样就不会出现上述的错误。

File:plugins/raiseinfo/movies/formwidgets/Actorbox.php

    public function getSaveValue($actors)
    {
        dd($actors);
        return $actors;
    } 

利用Chrome的开发工具-选择network,提交表单,我们可以看见getSaveValue函数获得传入的参数及其内部数据结构,可以看出是一个数组,而且传递的是输入的文本,而不是id

下面我们针对新输入的值进行处理
首先先建立一个数组,newArray,判断值是否是数字,如果是数字就保存到newArray中,如果不是数字,则需要新建一个Actor,这里我们模拟一个name和lastname,保存这个actor,然后把保存的这个actor的id放到newArray中:
File:plugins/raiseinfo/movies/formwidgets/Actorbox.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:plugins/raiseinfo/movies/formwidgets/Actorbox.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不一样。这个问题其实很好解决,就是先判断是否有重名的演员就可以了。


 

 

上一篇: October CMS - 快速入门 16 - 建立简单的组件

下一篇: October CMS - 快速入门 14 保存Form Widget的数据

144 人读过
文档导航