【问题标题】:How to show inputs comes from front end form in repeater control at backend in octoberCMS如何在 octoberCMS 后端的转发器控件中显示来自前端表单的输入
【发布时间】:2018-07-16 08:42:17
【问题描述】:

在组件中,

default.htm

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script type="text/javascript">
    $(document).ready(function(){
        var maxField = 3; //Input fields increment limitation
        var addButton = $('#add'); //Add button selector
        var wrapper = $('#main'); //Input field wrapper
         var i=1;
        var fieldHTML = '<div id="p_'+i+'" >' +
            'Name:<input type="text" name="name'+i+'" id="name'+i+'">' +
            ' <a href="" id="p_'+i+'" class="remove_button">remove</a>' +
            '</div>'; //New input field html
        var x = 1; //Initial field counter is 1

        //Once add button is clicked
        $(addButton).click(function(){


            //Check maximum number of input fields

           // alert("k");
            if(x < maxField){
                x++; //Increment field counter
                $(wrapper).append(fieldHTML); //Add field html
            }
            i++;
        });

        //Once remove button is clicked
        $(wrapper).on('click', '.remove_button', function(e){
            var proj_button_id = $(this).attr("id");
            //alert(edu_button_id);

            e.preventDefault();
            $("#"+ proj_button_id +"").remove();

            // $(this).parent('div').remove(); //Remove field html

            x--; //Decrement field counter
        });
    });
</script>



<form
        method="post"
        name="form" id="form" accept-charset="UTF8"
        enctype="multipart/form-data"  data-request="onEnter"  data-request-files>
    <input type="hidden" name="_handler" value="onEnter">
    {{ form_token() }}
    {{ form_sessionKey() }}



    <div id="main">


    Name:<input type="text" name="name0" id="name0">
    <a  href="javascript:void(0);"   id="add">Add Another</a>
    <input type="submit" name="createAccount" value="Submit">&nbsp;&nbsp;



</div>
</form>

组件名.php

class RepeaterName extends ComponentBase
{

    public function componentDetails()
    {
        return [
            'name' => 'ReapeterName',
            'description' => 'Name.'
        ];
    }



    public function onEnter()
    {
        $input = post();

        log::info($input);

        $contact = new RepeaterModel();
        $instArr = [];

        $instArr['innername'] = [];
        for($i=0; $i<=5; $i++)
        {

            if(isset( $input['name'.$i])) {
                $instArr['innername'][] = $input['name'.$i];

            }
        }
        Log::info(json_encode($instArr));
        $contact->name =json_encode($instArr);


        //$contact->name=Input::post('name');

        $contact->save();

        Log::info($contact);

    }

}


?>

型号名称.php

protected $jsonable = ['name'];

我想显示输入来自前端,它是多个名称,必须以 json 格式保存,因为我想在名称为“name”的重复控件中显示该输入,并且其中包含名为“innername”的文本控件那么有什么解决方案可以在后端表单中显示输入

【问题讨论】:

标签: backend octobercms


【解决方案1】:

是啊,我解决了实际上是我的错误,我在 componentName.php 中使用了 json_encode,这是错误的,因为我们已经在模型中使用了 $jsonable,所以传递 json_encode () 直接传递存储数据的数组

组件名称.php

 public function onEnter()
    {
        $input = post();

      //  log::info($input);

        $contact = new RepeaterModel();
        $instArr = [];


        for($i=0; $i<3; $i++)
        {

            $obj = [];
            if(isset( $input['name'.$i])) {
                $obj['innername'] = $input['name'.$i];

            }
            if(isset( $input['addr'.$i])) {
                $obj['inneraddr'] = $input['addr'.$i];

            }
            if(!empty($obj))
                $instArr[] = $obj;
        }

      $contact->fname=$instArr;

$contact->age=$input['age'];

        $contact->save();

        Log::info($contact);

    }

}

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多