Yii不依赖Model的表单生成器用法实例


Posted in PHP onDecember 04, 2014

本文实例讲述了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

/**

 * @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',

       'maxlength' => 32,

       'value' => ''

   ),

      ),

      'buttons' => array(

   'login' => array(

       'type' => 'submit',

       'label' => 'Login',

   ),

      ),

  );

  $model = new CFormModel();

  $form = new UCForm($config, $model);

  $this->render('index', compact('form'));

 }

}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
网站当前的在线人数
Oct 09 PHP
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
php去除数组中为0的元素的实例分析
Nov 17 PHP
Yii分页用法实例详解
Dec 04 #PHP
Yii配置文件用法详解
Dec 04 #PHP
yii实现图片上传及缩略图生成的方法
Dec 04 #PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 #PHP
yii的CURD操作实例详解
Dec 04 #PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 #PHP
php生成随机颜色方法汇总
Dec 03 #PHP
You might like
php开发文档 会员收费1期
2012/08/14 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
python使用socket远程连接错误处理方法
2015/04/29 Python
Python模块搜索路径代码详解
2018/01/29 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
2014年房地产个人工作总结
2014/12/20 职场文书
2015年工程部工作总结
2015/04/30 职场文书
正规借条模板
2015/05/26 职场文书
入党介绍人考察意见
2015/06/01 职场文书
运动员加油词
2015/07/18 职场文书
《开国大典》教学反思
2016/02/16 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python
MySQL常见优化方案汇总
2022/01/18 MySQL