当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-02 21:04:23 浏览: 评论:0 

这篇文章主要介绍了Yii不依赖Model的表单生成器用法,以实例形式对比分析了不依赖Model的表单生成器实现方法,是非常实用的技巧,需要的朋友可以参考下

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

代码如下:

  1. <?php 
  2. /** 
  3.  * @author Ryan <yuansir@live.cn/yuansir-web.com> 
  4.  */ 
  5. class UCForm extends CForm 
  6.  public function render() 
  7.  { 
  8.   $output = $this->renderBegin(); 
  9.   foreach ($this->getElements() as $element
  10.   { 
  11.    $output .= $element->render(); 
  12.   } 
  13.   foreach ($this->getButtons() as $button
  14.   { 
  15.    $output .= $button->render(); 
  16.   } 
  17.   $output .= $this->renderEnd(); 
  18.   return $output
  19.  } 
  20.  public function renderElement($element
  21.  { 
  22.   if (is_string($element)) 
  23.   { 
  24.    if (($e = $this[$element]) === null && ($e = $this->getButtons()->itemAt($element)) === null) 
  25.     return $element
  26.    else 
  27.     $element = $e
  28.   } 
  29.   if ($element->getVisible()) 
  30.   { 
  31.    //UCFormInputElement 代替 CFormInputElement 
  32.    if ($element instanceof UCFormInputElement) 
  33.    { 
  34.     if ($element->type === 'hidden'
  35.      return "<div style="visibility:hidden">n" . $element->render() . "</div>n"
  36.     else 
  37.      return "<div class="row field_{$element->name}">n" . $element->render() . "</div>n"
  38.    } 
  39.    else if ($element instanceof CFormButtonElement) 
  40.     return $element->render() . "n"
  41.    else 
  42.     return $element->render(); 
  43.   } 
  44.   return ''
  45.  } 

再来个简单的调用示例:

  1. <?php 
  2. /** 
  3.  * @author Ryan <yuansir@live.cn/yuansir-web.com> 
  4.  */ 
  5. class PlayerSearchController extends Controller 
  6.  public function actionIndex() 
  7.  { 
  8.   $config = array
  9.       'class' => 'ddd'
  10.       'action'=>''
  11.       'elements' => array
  12.    '<br><br>'
  13.    'username' => array
  14.        'label'=>'用户名啊',//注意这里的label 
  15.        'type' => 'text'
  16.        'maxlength' => 32, 
  17.        'value' => '' 
  18.    ), 
  19.    '<br><br>'
  20.    'password' => array
  21.        'label'=>'昵称啊',//注意这里的label 
  22.        'type' => 'password'
  23.        'maxlength' => 32, 
  24.        'value' => '' 
  25.    ), 
  26.       ), 
  27.       'buttons' => array
  28.    'login' => array
  29.        'type' => 'submit'
  30.        'label' => 'Login'
  31.    ), 
  32.       ), 
  33.   ); 
  34.   $model = new CFormModel(); 
  35.   $form = new UCForm($config$model); 
  36.   $this->render('index', compact('form')); 
  37.  } 

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

Tags: Yii Model表单生成器

分享到: