作者:zccst
一、我之前理解的yii表单提交
1,前端views
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'order-form',
'enableAjaxValidation'=>false,
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'startTime'); ?>
<?php
// 开始时间
// 注:(1)name必须唯一
// (2)name必须是$model->startTime。否则无法写入数据库
// (3)输入框内的图片由css设定
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'attribute' => 'startTime',
'language'=>'zh_cn',
'model'=>$model,
'name'=>$model->startTime,
'options' => array(
'showAnim' => 'fold',
'dateFormat' => 'yy-mm-dd',
),
'htmlOptions'=>array(
'style'=>'height:16px;',
),
));
?>
<?php echo $form->error($model,'startTime'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'endTime'); ?>
<?php
// 结束时间 注:name必须唯一
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'attribute' => 'endTime',
'model'=>$model,
'language'=>'zh_cn',
'name'=>$model->endTime,
// additional javascript options for the date picker plugin
'options'=>array(
'showAnim'=>'fold',
'dateFormat'=>'yy-mm-dd',
),
'htmlOptions'=>array(
'style'=>'height:16px;'
),
));
?>
<?php echo $form->error($model,'endTime'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? '创建' : '保存'); ?>
</div>
<?php $this->endWidget(); ?>
2,后端yii
public function actionCreate()
{
$model = new Order;
if(isset($_GET['userId'])){
$model->userId = $_GET['userId'];
}
if(isset($_POST['Order']))
{
$model->attributes=$_POST['Order'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
我当初认为,在action里获取前端表单值的方式是$model->attributes=$_POST['Order'];所以前端表单里的所有属性必须对应一个models/xx.php。
我原以为前端表单提交到yii后端有三种方式:
1,上面的这种方式。最纯粹的方式。
2,完全抛开yii的方式,使用原生态方式获取表单值,在通过GET/POST/AJAX到yii的action。
3,两者的结合。即在js中一部分使用$("#form_id").submit(),另一部分使用post方式提交。
二、实际的情况
实际并非如此,其实yii方式的views展示,本质还是要解析为html,css和javascript。即只有两种,没有混合型。即:
1,最纯粹的yii方式。
本质是system.web.helpers中的CHtml类。
2,原生态方式。这种方式更灵活。这个需建立在对yii理解深刻的基础之上。
批注:如果在展示页面时,使用了yii的插件,如日历,在原生态方式获取其值的时候,完全可以通过运行后用firebug查看其生成日历input输入框的id值,这样一定能获取到日期值。
如果您觉得本文的内容对您的学习有所帮助,您可以微信: