Home > Article > Backend Development > Using Yii form model and submitting form data in array form_PHP tutorial
According to the description in Yii documentation, the general process of Yii processing forms is:
In a small project just now, I wanted to use ajax to submit form information and verify and save it, but I didn’t want to use a hidden iframe for non-refresh submission, and the verification method of the model class could be used in the action, so I thought of using a form array. Submission method, for example:
form code:
<form action='' method='post' name='form_test'> <input type='text' name='arr[]' value='1'> <input type='text' name='arr[]' value='2'> <input type='text' name='arr[]' value='3'> </form>
After submission, you can directly use $_POST['arr'] to obtain the submitted data. $_POST['arr'] is:
<span Array<br /></span><span ( [</span>0] =><span a [</span>1] =><span b [</span>2] =><span c )</span>
Similarly, if you submit using the following form:
<form action='' method='post' name='form_test'> <input type='text' name='arr[3]' value='a'> <input type='text' name='arr[6]' value='b'> <input type='text' name='arr[8]' value='c'> </form>
$_POST['arr'] is:
<span Array</span><span ( [</span>3] =><span a [</span>6] =><span b [</span>8] =><span c )</span>
Of course you can also submit a two-dimensional array:
<form action='http://127.0.0.1/zhaobolu/test.php' method='post' name='form_test'> <input type='text' name='arr[][name1]' value='a'> <input type='text' name='arr[][name2]' value='b'> <input type='text' name='arr[][name3]' value='c'> </form>
$_POST['arr'] is:
<span Array</span><span ( [</span>0] => <span Array</span><span ( [name1] </span>=><span a ) [</span>1] => <span Array</span><span ( [name2] </span>=><span b ) [</span>2] => <span Array</span><span ( [name3] </span>=><span c ) )</span>
There is a problem here. If you do not set the key of the first sub-array, each value will be added to arr sequentially when generating the array. If you want to save the information in an array, just add a key value. , as follows:
<form action='http://127.0.0.1/zhaobolu/test.php' method='post' name='form_test'> <input type='text' name='arr[a][name1]' value='a1'> <input type='text' name='arr[a][value1]' value='a2'> <input type='text' name='arr[b][name2]' value='b1'> <input type='text' name='arr[b][value2]' value='b2'> </form>
$_POST['arr'] is:
<span Array</span><span ( [a] </span>=> <span Array</span><span ( [name1] </span>=><span a1 [value1] </span>=><span a2 ) [b] </span>=> <span Array</span><span ( [name2] </span>=><span b1 [value2] </span>=><span b2 ) )</span>
Posted below is an example of using ajax to submit a form and verifying it using the yii form model. The first is the model class part, which only has the simplest verification method:
<?<span php </span><span class</span> LandingForm <span extends</span><span CFormModel { </span><span public</span> <span $landing_title</span><span ; </span><span public</span> <span $landing_content</span><span ; </span><span public</span> <span $landing_position</span><span ; </span><span public</span> <span function</span><span rules() { </span><span return</span> <span array</span><span ( </span><span array</span>('landing_title, landing_content', 'required'), <span array</span>('landing_position', 'default', 'value'=>''),<span ); } }</span>
I found something interesting. When setting the parameter verification method, the model class needs to set rules for each public parameter. If there are parameters without set rules, use the form value in $_POST to assign values to the model. After that, the parameter value of the unset rule will be empty
Get the parameters submitted by the form in action and verify:
<span $model = new LandingForm;<br />$model</span>->attributes = <span $_POST</span>['form'<span ]; </span><span if</span>(<span $model</span>-><span validate()){ </span><span $info</span> = <span $model</span>-><span attributes; </span>...<span }<br />...</span>
The last is the code for the front-end submission form, using jquery:
<span var</span> info = <span new</span><span Object(); info </span>= { 'form[landing_title]'<span : landing_title, </span>'form[landing_content]'<span : landing_content, </span>'form[landing_position]'<span : landing_position, }; </span><span var</span> url = "..."<span ; $.post(url, info, </span><span function</span><span (rst){ ... });</span>