本文实例讲述了Yii不依赖Model的表单生成器用法。分享给大家供大家参考。具体实现方法如下:
默认的Yii的表单生成器只需要这样就可以了:
$form = new CForm('application.views.site.loginForm', $model);
这里的application.views.site.loginForm也可以是配置数组。但是如果$model参数不传的话是会报错的:Fatal error: Call to a member function isAttributeSafe()
比如我要生成一个组表单,但是我不想依赖于model,根据配置就可以生成一组表单该怎么办,
默认生成的表单的label是根据$model->attributes来显示的,所以我做了2件事:
1.继承CFormInputElement覆盖renderLabel方法,将label显示成自己配置的element的label
2.继承CForm覆盖renderElement方法,$element instanceof UCFormInputElement,并覆盖render方法,将Elements和getButtons循环输出
直接上代码:
app/protected/extensions/UCForm.php
<?php<br />/**<br /> * @author Ryan <br /> */<br />class UCForm extends CForm<br />{<br /> public function render()<br /> {<br /> $output = $this->renderBegin();<br /> foreach ($this->getElements() as $element)<br /> {<br /> $output .= $element->render();<br /> }<br /> foreach ($this->getButtons() as $button)<br /> {<br /> $output .= $button->render();<br /> }<br /> $output .= $this->renderEnd();<br /> return $output;<br /> }<br /> public function renderElement($element)<br /> {<br /> if (is_string($element))<br /> {<br /> if (($e = $this[$element]) === null && ($e = $this->getButtons()->itemAt($element)) === null)<br /> return $element;<br /> else<br /> $element = $e;<br /> }<br /> if ($element->getVisible())<br /> {<br /> //UCFormInputElement 代替 CFormInputEleme<em>8本文来源gao.dai.ma.com搞@代*码(网$</em><pre>搞代gaodaima码
nt
if ($element instanceof UCFormInputElement)
{
if ($element->type === ‘hidden’)
return “
else
return “
n”;
}
else if ($element instanceof CFormButtonElement)
return $element->render() . “n”;
else
return $element->render();
}
return ”;
}
}
再来个简单的调用示例:
<?php<br />/**<br /> * @author Ryan <br /> */<br />class PlayerSearchController extends Controller<br />{<br /> public function actionIndex()<br /> {<br /> $config = array(<br /> 'class' => 'ddd',<br /> 'action'=>'',<br /> 'elements' => array(<br /> '<br><br>',<br /> 'username' => array(<br /> 'label'=>'用户名啊',//注意这里的label<br /> 'type' => 'text',<br /> 'maxlength' => 32,<br /> 'value' => ''<br /> ),<br /> '<br><br>',<br /> 'password' => array(<br /> 'label'=>'昵称啊',//注意这里的label<br /> 'type' => 'password',<br /> 'maxlength' => 32,<br /> 'value' => ''<br /> ),<br /> ),<br /> 'buttons' => array(<br /> 'login' => array(<br /> 'type' => 'submit',<br /> 'label' => 'Login',<br /> ),<br /> ),<br /> );<br /> $model = new CFormModel();<br /> $form = new UCForm($config, $model);<br /> $this->render('index', compact('form'));<br /> }<br />}
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。