找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 548|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2617

主题

2617

帖子

7789

积分

论坛元老

Rank: 8Rank: 8

积分
7789
跳转到指定楼层
楼主
发表于 2018-2-14 05:51:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例讲述了Yii不依赖Model的表单生成器用法。分享给大家供大家参考。具体实现方法如下:
默认的Yii的表单生成器只需要这样就可以了:
[U]复制代码[/U] 代码如下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
[U]复制代码[/U] 代码如下:
*/
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 "n" . $element->render() . "n";
    else
     return "name}">n" . $element->render() . "n";
   }
   else if ($element instanceof CFormButtonElement)
    return $element->render() . "n";
   else
    return $element->render();
  }
  return '';
}
}
再来个简单的调用示例:
[U]复制代码[/U] 代码如下:
*/
class PlayerSearchController extends Controller
{
public function actionIndex()
{
  $config = array(
      'class' => 'ddd',
      'action'=>'',
      'elements' => array(
   '
',
   'username' => array(
       'label'=>'用户名啊',//注意这里的label
       'type' => 'text',
       'maxlength' => 32,
       'value' => ''
   ),
   '
',
   '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程序设计有所帮助。
            
            
您可能感兴趣的文章:
  • yii框架表单模型使用及以数组形式提交表单数据示例
  • yii实现创建验证码实例解析
  • Yii框架form表单用法实例
  • PHP Yii框架之表单验证规则大全
  • yii用户注册表单验证实例
  • Yii使用Captcha验证码的方法
  • yii2中添加验证码的实现方法
  • YII2.0之Activeform表单组件用法实例
  • Yii2增加验证码步骤详解
  • yii2 modal弹窗之ActiveForm ajax表单异步验证
  • Yii2简单实现给表单添加验证码的方法
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端