Yii不依赖Model的表单生成器用法实例
本文实例讲述了Yii不依赖Model的表单生成器用法。分享给大家供大家参考。具体实现方法如下:
默认的Yii的表单生成器只需要这样就可以了:
$form=newCForm('application.views.site.loginForm',$model);
这里的application.views.site.loginForm也可以是配置数组。但是如果$model参数不传的话是会报错的:Fatalerror:CalltoamemberfunctionisAttributeSafe()
比如我要生成一个组表单,但是我不想依赖于model,根据配置就可以生成一组表单该怎么办,
默认生成的表单的label是根据$model->attributes来显示的,所以我做了2件事:
1.继承CFormInputElement覆盖renderLabel方法,将label显示成自己配置的element的label
2.继承CForm覆盖renderElement方法,$elementinstanceofUCFormInputElement,并覆盖render方法,将Elements和getButtons循环输出
直接上代码:
app/protected/extensions/UCForm.php
<?php /** *@authorRyan<yuansir@live.cn/yuansir-web.com> */ classUCFormextendsCForm { publicfunctionrender() { $output=$this->renderBegin(); foreach($this->getElements()as$element) { $output.=$element->render(); } foreach($this->getButtons()as$button) { $output.=$button->render(); } $output.=$this->renderEnd(); return$output; } publicfunctionrenderElement($element) { if(is_string($element)) { if(($e=$this[$element])===null&&($e=$this->getButtons()->itemAt($element))===null) return$element; else $element=$e; } if($element->getVisible()) { //UCFormInputElement代替CFormInputElement if($elementinstanceofUCFormInputElement) { if($element->type==='hidden') return"<divstyle="visibility:hidden">n".$element->render()."</div>n"; else return"<divclass="rowfield_{$element->name}">n".$element->render()."</div>n"; } elseif($elementinstanceofCFormButtonElement) return$element->render()."n"; else return$element->render(); } return''; } }
再来个简单的调用示例:
<?php /** *@authorRyan<yuansir@live.cn/yuansir-web.com> */ classPlayerSearchControllerextendsController { publicfunctionactionIndex() { $config=array( 'class'=>'ddd', 'action'=>'', 'elements'=>array( '<br><br>', 'username'=>array( 'label'=>'用户名啊',//注意这里的label 'type'=>'text', 'maxlength'=>32, 'value'=>'' ), '<br><br>', 'password'=>array( 'label'=>'昵称啊',//注意这里的label 'type'=>'password', 'maxlength'=>32, 'value'=>'' ), ), 'buttons'=>array( 'login'=>array( 'type'=>'submit', 'label'=>'Login', ), ), ); $model=newCFormModel(); $form=newUCForm($config,$model); $this->render('index',compact('form')); } }
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。