Yii与表单

作者: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值,这样一定能获取到日期值。


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
Yii与表单

你可能感兴趣的:(yii)