Yii不依赖Model的表单生成器用法实例
《Yii不依赖Model的表单生成器用法实例》要点: 本篇章节讲解Yii不依赖Model的表单生成器用法.分享给大家供大家参考.具体实现办法如下:PHP实例 默认的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件事:PHP实例 1.继承CFormInputElement覆盖renderLabel办法,将label显示成自己配置的element的labelPHP实例 2.继承CForm覆盖renderElement办法,$element instanceof UCFormInputElement,并覆盖render办法,将Elements和getButtons循环输出
代码如下:
<?php
/** ?* @author Ryan <yuansir@live.cn/yuansir-web.com> ?*/ class UCForm extends CForm { ?public function render() ?{ ? $output = $this->renderBegin(); ? foreach ($this->getElements() as $element) ? { ?? $output .= $element->render(); ? } ? foreach ($this->getButtons() as $button) ? { ?? $output .= $button->render(); ? } ? $output .= $this->renderEnd(); ? return $output; ?} ?public function renderElement($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 ($element instanceof UCFormInputElement) ?? { ??? if ($element->type === 'hidden') ???? return "<div style="visibility:hidden">n" . $element->render() . "</div>n"; ??? else ???? return "<div class="row field_{$element->name}">n" . $element->render() . "</div>n"; ?? } ?? else if ($element instanceof CFormButtonElement) ??? return $element->render() . "n"; ?? else ??? return $element->render(); ? } ? return ''; ?} } 再来个简单的调用示例:
代码如下:
<?php
/** ?* @author Ryan <yuansir@live.cn/yuansir-web.com> ?*/ class PlayerSearchController extends Controller { ?public function actionIndex() ?{ ? $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', ????? ), ????? 'buttons' => array( ?? 'login' => array( ?????? 'type' => 'submit', ?????? 'label' => 'Login', ?? ), ? ); ? $model = new CFormModel(); ? $form = new UCForm($config,$model); ? $this->render('index',compact('form')); ?} } 希望本文所述对大家基于Yii框架的PHP程序设计有所赞助.PHP实例 编程之家培训学院每天发布《Yii不依赖Model的表单生成器用法实例》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |