【问题标题】:How to not require a required input如何不需要必需的输入
【发布时间】:2023-03-15 07:15:01
【问题描述】:

我有一个与User 关联的BuildingUser 也可以注册、登录等。我有我的验证集,因此需要 User 键字段(例如 emailname 等)。

在创建建筑物时,我还提供了当场关联用户的功能。我的建筑表单包含该关键用户信息的输入:

<?php echo $this->Form->input( 'User.first_name' ) ?>
<?php echo $this->Form->input( 'User.last_name' ) ?>
<?php echo $this->Form->input( 'User.email' ) ?>

但是,我不希望这些输入被指示为必需的 b/c 我希望用户能够创建 Building without necessarily creating aUser` 记录。我找不到方法是从验证规则放置的 div 中删除所需的类。

我尝试了'required' =&gt; false 的各种组合并设置了class 值,但到目前为止没有任何效果。有没有一种好方法可以取消表单输入?

谢谢。

【问题讨论】:

  • 标题+1。由于某种原因,它让我微笑......

标签: cakephp-1.3


【解决方案1】:

应该这样做:

echo $this->Form->input('User.first_name',
                        array('div' => array('class' => 'input text')));

或者,您可以在控制器中为该视图使用unset required 规则,但请注意结果:

unset($this->User->validate['first_name']['ruleName']['required']);

【讨论】:

  • 有趣的是,我认为第一个也可以,但它肯定 工作。我想也许我错过了一些东西,但我想我只是用那个方法来添加所需的类;永远不要删除它。
  • 这看起来很疯狂,但即使取消设置 required 键也不会这样做。我还明确将其设置为falsedebug() 打印告诉我它未设置/错误,但该类仍出现在 div 上。
【解决方案2】:

我很惊讶 deceze 的解决方案对我不起作用(也许我只是做错了什么),但我最终不得不使用 Javascript 来“手动”从每个包含 div 的字段中删除所需的类。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,这对我有用(在 Cake 1.2 中测试,但我确信它会转化为 1.3)

    1. 在你的标签中添加一个“norequire”类:

      echo $this->Form->input( 'User.first_name', array('label'=>array('class'=>'norequire','text'=>'First Name') ));
      
    2. 在你的 CSS 中,设置 norequire 类:

      form .required label.norequire { font-weight:normal;  }
      form .required label.norequire:after { content:'';  }
      

    (“form .required”部分对于覆盖所需类的蛋糕默认 css 很重要。)

    【讨论】:

    • 不错的解决方案。为此,我喜欢使用 CSS 来覆盖表示和内容。
    【解决方案4】:

    我最终手动添加了部门。不是很优雅,但很有效:

    <?php if ($this->Form->isFieldError('first_name')) { ?>
        <div class="input text error">
    <?php } else { ?>
        <div class="input text">
    <?php }
        echo $this->Form->input('first_name', array('div' => false)); ?>
    </div>
    

    【讨论】:

      【解决方案5】:
      $("#idOfYourTag").attr("required","false");
      

      这对我有用

      【讨论】:

        【解决方案6】:

        我仍然没有找到一个“正确”的答案,但作为一个快速破解,你可以尝试不使用表单助手并将代码放入自己

        <?php
        //echo $this->Form->input( 'User.first_name' )
        //echo $this->Form->input( 'User.last_name' )
        //echo $this->Form->input( 'User.email' )
        echo "<div class='input text'><label for='User_first_name'>First Name</label>
              <input name='data[User][first_name]' maxlength='50' type='text' id='User_first_name'/></div>";
        echo "<div class='input text'><label for='User_last_name'>Last Name</label>
              <input name='data[User][last_name]' maxlength='50' type='text' id='User_last_name'/></div>";
        echo "<div class='input text'><label for='User_email'>Username</label>
              <input name='data[User][email]' maxlength='50' type='text' id='User_email'/></div>";
        ?>
        

        【讨论】:

          【解决方案7】:

          我想这已经很久了,但这是使输入元素不需要的“正确”方法(至少在 Cake 2.4.1 中):

          echo $this->Form->input('studentid', array(
              'label' => __('Student ID'),
              'required' => false
          ));
          

          只需传递'required' =&gt; false

          我真的希望我可以说我知道如何自动触发此行为,但修改我的模型似乎不会影响自动生成的 &lt;input&gt; 元素。如果/当我弄清楚时,我会更新这篇文章。

          【讨论】:

            猜你喜欢
            • 2021-05-13
            • 2020-01-30
            • 2017-06-19
            • 1970-01-01
            • 2022-11-21
            • 1970-01-01
            • 2017-12-24
            • 1970-01-01
            • 2011-07-12
            相关资源
            最近更新 更多