将输入字段添加到所有表单中 - cakephp

Posted

技术标签:

【中文标题】将输入字段添加到所有表单中 - cakephp【英文标题】:Add input field into all forms - cakephp 【发布时间】:2014-07-30 07:20:25 【问题描述】:

我需要在网站所有页面的每个表单中添加一个隐藏的输入字段,其中包含一些值(在控制器中定义),以便与表单一起提交。

我不能通过 JS 做到这一点,因为我正在使用安全组件,它会给出一个“黑洞”错误(我不想阻止这种情况,我的意思是将该字段添加到未锁定的字段列表中)。有什么办法吗?

谢谢。

【问题讨论】:

您可以使用自定义助手,它会在表单中生成隐藏字段并分配值来执行此操作。 为什么不能将它添加到您的视图中? $this->Form->input('field', array('type' => 'hidden', 'value' => $something)); 我可以,但想象一下,如果您有几十个或更多表格......只需要一个快速的解决方案 【参考方案1】:

您可以创建自定义FormHelper,并在创建表单时添加隐藏输入:

App::import('Helper', 'Form') ;

class MyFormHelper extends FormHelper 

    public function create ($model = null, $options = array()) 
        return parent::create($model, $options).$this->_myInput() ;
    

    protected function _myInput () 
        return parent::input('myfield', array(
            'value' => $this->_View->viewVars['myVarName'] ;
        ));
    


此代码仅适用于 Cakephp 2.x,对于以前的版本,请参阅 this link 以获取在帮助程序中访问视图变量的方法。

然后在您的AppController 中添加:

public $helpers = array(
    'Form' => array(
        'className' => 'MyForm'
    )
) ;

【讨论】:

为什么是私有的?应该受到保护并且您没有遵循 CakePHP 约定,受保护应该以 _ 为前缀,私有以 __ 为前缀。 @burzum 为什么要保护而不是私有?您正在谈论的约定对于插件或库很有用,我给出了一个简单的示例,说明 OP 可能不会在插件/库中分发的东西,如果他这样做了,他肯定会修改我的代码。 @Holt tks 的答案,我会试一试然后回来,我认为肯定可以工作。 @Holt 我完全不同意,约定总是很重要。 Private 应该只用在完全关键的方法上,并表明“你不应该出于充分的理由访问它”。代码应该始终是可扩展的,就像您说的那样,人们可以以任何方式更改代码,但随后他们将不得不更改可见性范围或修改内部(很可能是 API 重大更改),而不仅仅是能够扩展类。由于这个原因,整个 CakePHP 框架没有一个私有方法。 @burzum 我同意你对protected 可见性的看法,我的代码是错误的。而且我并没有说约定不重要,只是您不必遵循 CakePHP 编码约定,因为您在自己的应用程序中使用它(我不是在谈论使代码更容易的 CakePHP 约定,例如默认命名等.).

以上是关于将输入字段添加到所有表单中 - cakephp的主要内容,如果未能解决你的问题,请参考以下文章

如何将类添加到 Django 表单中的字段标记

html 更改客户在电子邮件中收到的表单标题 - 在其他输入字段之后将其添加到表单顶部

html 更改客户在电子邮件中收到的表单标题 - 在其他输入字段之后将其添加到表单顶部

html 更改客户在电子邮件中收到的表单标题 - 在其他输入字段之后将其添加到表单顶部

html 更改客户在电子邮件中收到的表单标题 - 在其他输入字段之后将其添加到表单顶部

以相同的形式将输入从 cf7 表单添加到段落