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
代码如下:
- <?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程序设计有所帮助。
Tags: Yii Model表单生成器
- 上一篇:Yii分页用法实例详解
- 下一篇:Yii框架form表单用法实例
相关文章
- ·Yii中单独为module加载Bootstrap或其他组件的4种方法(2014-01-07)
- ·yii2超好用的日期组件和时间组件(2019-07-30)
- ·详解PHP的Yii框架中扩展的安装与使用(2019-10-20)
- ·PHP的Yii框架中过滤器相关的使用总结(2019-10-31)
- ·简介PHP的Yii框架中缓存的一些高级用法(2019-10-31)
- ·深入解析PHP的Yii框架中的缓存功能(2019-11-05)
- ·PHP的Yii框架中创建视图和渲染视图的方法详解(2019-11-05)
- ·PHP的Yii框架中Model模型的学习教程(2019-11-05)
- ·详解PHP的Yii框架中的Controller控制器(2019-11-05)
- ·yii2的ActiveForm表单使用的方法介绍(2020-02-15)
- ·Yii2框架的csrf验证原理分析及token缓存解决方案(2020-04-05)
- ·Yii操作数据库的3种方法(2020-10-26)
- ·yii上传文件或图片实例(2020-11-05)
- ·yii框架表单模型使用及以数组形式提交表单数据示例(2020-11-25)
- ·yii框架通过控制台命令创建定时任务示例(2020-11-25)
- ·yii框架配置默认controller和action示例(2020-11-25)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)