`

用cakephp的formhelper来增加表单

    博客分类:
  • php
阅读更多
一、关于这篇文章

    由于近期用cakephp开发一个boss后台,找了一下关于php方面的资料,自己添加一部分,记录下这篇文章。

二、基本的语法内容(摘录部分)

2.1  创建表单的开始和结束语句
$form->create(string $model = null, array $options = array())
$form->end( $options = NULL )

这个是一对form的开始和结尾方法,构成一个完整的form。
echo $form->create();
echo $form->end();


<form id="AddForm" method="post" action="/test/tests/add">
	<fieldset style="display:none;">
		<input type="hidden" name="_method" value="POST" />
	</fieldset>
</form>


当不带任何参数的时候,form->create生成了一个post方法的action为当前controller的add方法的form,并且生成了一个很奇怪的隐藏input,名字是_method,暂时还不知道是干啥子用的。form->end就生成了一个结尾。这显然不是我们所需要的。form->end负责着生成最后的提交按钮的说。

      所以我们最需要的形式是:
echo $form->create("",
	array(
	  "type"=>"get",
	  "id"=>"a",
	  "name"=>"b",
	  "onsubmit"=>"javascript:chk()",
	  "url"=>array(
	    'controller'=>'ControllerName',
	    'action'=>'ActionName',
	    '?'=>array(
	      "id"=>5,
	      "category"=>3,
	      "category2"=>5
	    )
	  )
	)
     );
echo $form->end("提交");


<form id="a" name="b" onsubmit="javascript:chk()" method="post" action="/test/ControllerName/ActionName?id=5&amp;amp;category=3&amp;amp;category2=5">
<fieldset style="display:none;">
<input type="hidden" name="_method" value="DELETE" />
</fieldset>
<div class="submit">
<input type="submit" value="提交" />
</div>
</form>



在上面的例子里面,type=“get”的时候,不会生成对应的<fieldset>里面的隐藏域,其他的“post、put、 delete ” 都会生成这个很奇怪的隐藏域,不知道到底是做啥子用途的。get的时候method会是get,其他的时候都是post,只不过隐藏域会有所不同。还有这个form的url生成的参数的时候,“&”会被2次转义成“&amp;amp;”。很是奇怪的说。

对于上传附件表单,里面还增加 ‘ENCTYPE’=>’multipart/form-data’ 选项。

这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。
这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。

echo $form->end(
  array(
    'label' => '提交',
    'name' => 'Whatever',
    'div' => array(
      'class' => 'good'
    )
  )
);


<div class="good">
    <input type="submit" name="Whatever" value="提交" />
  </div>
</form>


2.2、输入input

echo $form->input('birthday',
    array(
        'name'=>'birthday_name',
        'id'=>'birthday_id_overwrite',
        'label' => '生日',
        'value'=>"20090310"
    )
);


<div class="input text">
  <label for="birthday_id_overwrite">生日</label>
  <input name="birthday_name" type="text" id="birthday_id_overwrite" value="20090310" /></div>

这个里面主要的是第一个参数id,会生成input的id,而且默认的name是data[id],会涉及到以后的取值问题哦。label就是 input前面的字了,对于非英文状态的页面很是管用,在第二个array中的id和name都是可以指定的。这个需要注意。还可以指定 maxLength="3"使之获得最大长度的属性。



echo $form->input('birthday');



<div class="input text">
    <label for="birthday">Birthday</label>
    <input name="data[birthday]" type="text" value="" id="birthday" />
</div>


输入框不含lable、div
echo $form->input('birthday', array('lable'=>false,'div'=>false));


    <input name="data[birthday]" type="text" value="" id="birthday" />


2.3、输入password


echo $form->input('password',array('value'=>'fdsa','label'=>'邪门的密码框'));

<div class="input text">
   <label for="password">邪门的密码框</label>
    <input name="data[password]" type="text" value="fdsa" id="password" />
</div>

         这个东东有够邪门的,单独运行还不行。而出现的普通的输入框, 可以选择

    1、放在form->create和end中间,并且在create中指定了第一个参数,从第二个参数中指定id或者name覆盖第一个参数都不行。是不是很邪门。

    2、或者单独运行的话,用type=>’password’来强制变成password类型,不期待他的自动识别。

注:自动识别的话,需要设置第一个参数为 ‘psword’, ‘passwd’, ‘password’ 三个中的某个值,还不一定会识别成功。hoho。真是崩溃。



echo $form->create('123',array('name'=>'456','id'=>'123'));
echo $form->input('password',array('value'=>'fdsa','label'=>'邪门的密码框'));
echo $form->end();


<form name="456" id="123" method="post" action="/test/123s/add">
    <fieldset style="display:none;">
        <input type="hidden" name="_method" value="POST" />
    </fieldset>
    <div class="input password">
        <label for="123Password">邪门的密码框</label>
        <input type="password" name="data[123][password]" value="fdsa" id="123Password" />
    </div>
</form>

2.4、输入textarea
echo $form->input('textarea');
echo $form->input('textarea',array('rows' => '5', 'cols' => '5'));
echo $form->input('textarea',array('type' =>'textarea'));
echo $form->input('textarea',array('cols' null,'rows'=>null,'type'=>'textarea'));

<div class="input text">
    <label for="textarea">Textarea</label>
    <input name="data[textarea]" type="text" value="" id="textarea" />
</div>
<div class="input text">
    <label for="textarea">Textarea</label>
    <textarea name="data[textarea]" cols="5" rows="5" id="textarea" >
    </textarea>
</div>
<div class="input textarea">
    <label for="textarea">Textarea</label>
    <textarea name="data[textarea]" cols="30" rows="6" id="textarea" ></textarea>
</div>
<div class="input textarea">
    <label for="textarea">Textarea</label>
    <textarea name="data[textarea]" cols="" rows="" id="textarea" >
</textarea>

     这个里面和password一样,只写一个参数的时候,识别不出来,出来的是普通的input。而强制制定了type=textarea后,将能正确识别,或者指定rows或者cols中的某个值,也是能识别出来的。但是我的习惯是不写rows和cols,而是通过css指定其高度宽度什么的。所以,就出现了最后的那中写法,先清空rows和cols,再指定type。hoho。到现在为止,我觉得有必要的话,需要重写个formhelper了。

2.5、上传文件框file


echo $form->input('file_upload',array('type'=>'file','label'=>false,'div'=>false));

文件上传的框框,我可不喜欢有label和div跟着,设置label和div都为false,就没有对应的输出了。真是不错的主意。其他的里面也可以用这个办法去掉默认的label和div。这个是很常用的。


<input type="file" name="data[file_upload]" value="" id="file_upload" />

2.6、下拉框select



echo $form->input('field', array('options' => array(1,2,3,4,5),'label'=>false,'div'=>'false));



<select name="data[field]" id="field">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
</select>


不过这种写法没有办法指定value,所以要改进一下。增加options,value=>text。


echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            '10'=>'唐山',
            '18'=>'上海',
            '30'=>'美国'
        ),
        'label'=>false,
        'div'=>false,
        'onchange'=>'javascript:alert(this.value)'
    )
);

<select name="data[field]" onchange="javascript:alert(this.value)" id="field">
<option value="5"> 北京</option>
<option value="10">唐山</option>
<option value="18">上海</option>
<option value="30">美国</option>
</select>

当然可以增加个选项,’multiple’=>true 或者 ‘multiple’=>’multiple’ 使之变成多选。


echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            '10'=>'唐山',
            '18'=>'上海',
            '30'=>'美国'
        ),
        'label'=>false,
        'div'=>false,
        'multiple'=>true
    )
);


    当没有options的时候,可以强制’type’=>’select’使之呈现为下拉框。



1.echo $form->input(
    'field',
    array(
        'type'=>'select',
        'label'=>false,
        'div'=>false
    )
);


当然还可以指定’selected’=>options中的vlaue值,使select有默认值,这个函数也很不错,不用自己写循环了。 hoho~。官方还出了个专门用于select制定默认值的参数。 ‘default’=>value ,例如下例中的’selected’=>18就可以是’default’=>18,所以貌似这个参数也是个垃圾参数。

default可以用于radio、select。但是selected不可以用于radio,但是可以用于select和 Cakephp特有的时间类型。



echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            '10'=>'唐山 ',
            '18'=& gt;'上海',
            '30'=>'美国'
        ),
        'selected'=>18,
        'label'=>false,
        'div'=>false
    )
);


官方对于select还有个垃圾参数选项,叫做empty。用于设置每个select的最开始的那个“请选择”的空值的option,但是完全可以通过设置options的第一个值为”=>’请选择’来达到同样的效果,并且官方提供的empty选项还会替换options中的值为空的 option,如:


echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            ''=>'请选择',
            '10'=>'唐山',
            '18'=>'上海',
            '30'=>'美国'
        ),
        'selected'=>18,
        'label'=>false,
        'div'=>false,
        'empty'=>'chooseone'
    ));



<select name="data[field]" id="field">
<option value="5"> 北京</option>
<option value="">chooseone</option>
<option value="10">唐山</option>
<option value="18" selected="selected">上海</option>
<option value="30">美国</option>
</select>

2.7、单选框radio

单选框radio和select的写法基本上一致,就是type=‘radio’就行了。所有属性几乎一致。



echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            '10'=>'唐山',
            '18'=>'上海',
            '30'=>'美国'
        ),
        'type'=>'radio',
        'default'=>10,
                  'legend'=>false,
        'div'=>false,
        'onchange'=>'javascript:alert(this.value)'
    )
);

和select相比,radio能使用default,不能使用selected、multiple、empty。而且对于radio,label 一定不要false掉,label在选择东西的时候还是很有用途的。

对于“legend”选项,当不设为false的时候会多个<fieldset><legend>Field</legend>……</field>出来,很是令人崩溃。

2.8、多选框checkbox

多选框和其他的东东很不一样,居然不是通过设置type来获得的,居然是通过设置select的multiple属性来获得的。而且最终出来的代码也不是很理想,有着多余的div,并且js事件也无法获得。所以到时候也许需要对应的css和js进行控制了。


echo $form->input(
    'field',
    array(
        'options' => array(
            '5'=>'北京',
            '10'=>'唐山',
            '18'=>'上海',
            '30'=>'美国'
        ),
        'type'=>'select',
        'multiple'=>'checkbox',
        'default'=>array("5","18"),
        'label'=>false,
        'div'=>false
    )
);


<input type="hidden" name="data[field]" value="" />
 
<div class="checkbox">
<input type="checkbox" name="data[field][]" checked="checked" value="5" id="Field5" />
<label for="Field5" class="selected">北京</label>
</div>
 
<div class="checkbox">
<input type="checkbox" name="data[field][]" value="10" id="Field10" />
<label for="Field10">唐山</label>
</div>
 
<div class="checkbox">
<input type="checkbox" name="data[field][]" checked="checked" value="18" id="Field18" />
<label for="Field18" class="selected">上海</label></div>
 
<div class="checkbox">
<input type="checkbox" name="data[field][]" value="30" id="Field30" />
<label for="Field30">美国</label>
</div>

而且会生成个多余的hidden东东,很奇怪的说。

2.9、隐藏域hidden


echo $form->input(
    '',
    array(
        'type'=>'hidden',
        'id'=>'test_id',
        'name'=>'test_name',
        'value'=>'test_value',
        'label'=>false,
        'div'=>false
    )
);

<input type="hidden" name="test_name" id="test_id" value="test_value" />

2.10、提交按钮submit



echo $form->submit('提交',array("div"=>false));


<input type="submit" value="提交" />

图像组成的submit


echo $form->button('',array('type'=>'image','src'=>'test.jpg'));


<input type="image" value="" src="test.jpg" />

普通按钮button


echo $form->button('按钮',array('class'=>'class_name'));

<input type="button" value="按钮" class="class_name" />
分享到:
评论

相关推荐

    CakePHP 1.2 API 中文文档

    开发者可以通过安装和配置插件来快速增加新特性。 **缓存(Caching)** 为了提高性能,CakePHP 提供了多种缓存策略,包括文件系统、内存(如APC)和数据库等。 **总结** CakePHP 1.2 API 中文文档覆盖了框架的...

    CakePHP中文手册

    7. **表单处理**:介绍如何创建和验证表单数据,以及如何利用CakePHP的FormHelper来生成HTML表单元素。 8. **组件(Component)**:组件是一组可重用的控制器逻辑,手册会教你如何创建和使用它们来扩展控制器功能。...

    cakephp框架源码

    Controller部分,CakePHP提供了一套强大的组件(Component)和行为(Behavior)系统,组件可以看作是可复用的功能模块,而行为则是对Model的扩展,增加了数据操作的灵活性。例如,AuthComponent用于用户认证,...

    cakephp 框架1.3.11版本

    4. **辅助方法和组件**:CakePHP提供了许多内置的辅助方法和组件,如FormHelper和HtmlHelper,它们能帮助开发者快速生成HTML表单和元素,减少重复代码。 5. **验证**:CakePHP内置了强大的验证机制,可以方便地对...

    cakephp 1.2版本API

    API中包含关于FormHelper的使用,帮助开发者轻松创建和处理表单。 6. 测试与调试:CakePHP 1.2提供了内置的测试框架和调试工具,如PHPUnit集成,方便开发者进行单元测试和功能测试,以及DebugKit,用于实时查看应用...

    cakephp 实例(增、删、改操作)

    - 使用FormHelper生成表单元素,并提交到相应的Controller。 - 在Controller的对应方法中,接收到POST数据后,使用ORM(对象关系映射)的save()方法将数据保存到数据库。 2. **读取(Read)**: - Controller...

    cakephp

    本节简要介绍了本书的结构和覆盖的主题,包括安装CakePHP、设置本地开发环境、运行MySQL数据库、使用PHPMyAdmin和其他MySQL管理工具、搭建第一个CakePHP应用以及如何修改和扩展应用的设计。 #### 七、安装CakePHP ...

    packtpub.CakePHP.1.3.Application.Development.Cookbook.Mar.2011

    学习视图助手(Helper)的使用,如 FormHelper 和 HtmlHelper,以方便生成表单和HTML元素。 6. **蛋糕哲学**:理解 CakePHP 的“约定优于配置”原则,这使得项目具有良好的结构和可维护性。学习 CakePHP 的命名规范...

    cakephp 初学

    蛋糕PHP的ORM(对象关系映射)系统,如ActiveRecord,允许开发者用面向对象的方式来操作数据库,无需编写SQL语句。了解模型如何与数据库表关联,以及如何执行CRUD(创建、读取、更新、删除)操作,是蛋糕PHP的核心...

    cakephp-2.1.2

    此外,CakePHP 的助手函数如 htmlHelper、formHelper 等,为创建 HTML 元素和表单提供了极大的便利。 控制器层是 MVC 三者中核心的协调者,它负责接收 HTTP 请求,处理数据,然后调度模型和视图。在 CakePHP 2.1.2 ...

    cakephp手册(doc打印版).rar

    《CakePHP手册(Doc打印版)》是一份详尽的开发者指南,专为那些使用CakePHP框架进行Web应用开发的专业人士准备。CakePHP是一个基于MVC(Model-View-Controller)设计模式的开源PHP框架,它旨在简化开发过程,提高...

    CakePHP manual zh 中文手册

    通过`FormHelper`,你可以方便地创建表单元素,并利用`validate`功能进行客户端和服务器端的验证。 ### 8. 模板和布局 模板用于显示特定页面内容,布局则包裹整个应用程序的外观。布局文件通常为`Layout/default....

    cakephp3-user-management

    CakePHP的`FormHelper`和`Validator`类可以帮助我们在客户端和服务器端进行表单验证,显示错误消息。 9. **CRUD操作**:用户管理通常还包括用户数据的创建、读取、更新和删除(CRUD)。使用CakePHP的`Crud`组件或...

    cakephp-plugins-bootstrap4

    1. **表单设计**:使用视图助手,可以快速创建Bootstrap4风格的表单,如`FormHelper::input()`可以生成带有Bootstrap4样式的输入字段。 2. **导航栏构建**:通过`NavbarHelper`,可以方便地创建响应式的Bootstrap4...

    cakephp2x

    CakePHP 2.x 的安装通常通过Composer完成,开发者可以使用Git克隆仓库或下载ZIP文件。在配置阶段,需要修改app/Config/core.php 和 app/Config/config.php 文件以设定数据库连接、错误处理和应用行为。 2. MVC架构...

    CakeFianl.zip

    6. **助手(Helpers)**:CakePHP提供了一系列助手类,如HtmlHelper和FormHelper,帮助开发者快速创建HTML元素和表单。 7. **安全**:掌握CakePHP的安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防御...

    cakephp3_tutolial

    蛋糕PHP 3支持自动验证和处理表单数据,通过`FormHelper`可以在视图中轻松创建表单,而控制器则负责处理提交的数据。 11. **错误处理和调试** 蛋糕PHP 3提供了一个强大的错误和异常处理机制,以及详细的日志记录...

    cake php mvc

    - **辅助类**:为了简化视图层的操作,CakePHP引入了辅助类的概念,例如FormHelper和HtmlHelper等,这些辅助类可以帮助开发者更方便地处理表单和HTML元素。 #### 五、编程应用逻辑 在本章节中,作者将详细讲解如何...

Global site tag (gtag.js) - Google Analytics