如何通过不同的表单输入重用相同的控制器

时间:2011-11-07 21:49:30

标签: cakephp

以下是我的观点部分:

echo $this->Form->create("Provider", array('action' => 'view_admit_lookup', ''));
echo $this->Form->input("last_name", array('label' => 'Doctor Last Name'));
echo $this->Form->submit('Search');
echo "<br><br>";

$alphabet = array(
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
    "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
    "Y", "Z");
foreach($alphabet as $letter):
    // create the row of buttons that are responsible for the search.
    echo $this->Form->button($letter, array('action' => 'view_admit_lookup'));
endforeach;

现在,我希望能够修改并重新使用view_admit_lookup。

这是我控制器中的方法:

function view_admit_lookup($letter) {
    echo "<pre>The letter is: ".$letter."</pre>";

    // here we begin searching for whatever we need.
    if(!empty($this->data['Provider']['last_name'])) {
        $this->set('provider',
            $this->Provider->find('all',
                                      array('conditions' =>
                                          array('Provider.last_name LIKE' =>
                                            $this->data['Provider']['last_name'].'%'),
                                            'order' =>
                                          array('Provider.last_name ASC',
                                                'Provider.first_name ASC'),
                                           )
                                  )
                  );
    }

    // set the title and the default layout.
    $this->set('title_for_layout', 'Admit Lookup');
    $this->layout = 'default';
}

如何“获取”与输入相关联的字母(按钮或文本字段),并根据该值执行特定操作?

1 个答案:

答案 0 :(得分:1)

您当前向$this->Form->button()添加“操作”的方法不正确。根据Cake文档,"$options is used primarily to specify HTML tag attributes"。按钮输入没有动作属性。 action属性属于表单元素。

回应你的评论:
$this->Form->button($letter, array('action' => 'view_admit_lookup'));没有任何目的,这行Cake应该生成以下HTML:

<input type="button" value="A" action="view_admit_lookup">

这行HTML没有意义,实际上不会做任何事情。您应该阅读HTML表单,因为您似乎并不完全了解它们的工作方式。建议阅读:

您的问题是所有按钮都是同一表单的一部分,没有明确的方法来发送与单击按钮对应的字母。我认为最简单的两种方式是......

  1. <强> HTML
    为每个按钮创建单独的<form>元素。每种形式都可以通过以下两种方式之一传递信件:

    1. 将相应的字母添加到表单的操作中。
    2. 将相应的字母添加到每个表单中隐藏的<input>元素。
    3. 然后,您将按钮从标准<input>按钮更改为<submit>按钮,并为每个字母按钮提交单独的表单。

      这样的事情:

      <form action="view_admit_lookup/a" method="get">
        <input type="submit" value="A">
      </form>
      <form action="view_admit_lookup/b" method="get">
        <input type="submit" value="B">
      </form>
      <form action="view_admit_lookup/c" method="get">
        <input type="submit" value="C">
      </form>
      ...
      
    4. <强>的JavaScript
      拥有1个<form>元素和所有字母按钮,并使用JavaScript函数捕获每个按钮的click操作。使用此功能可以使用点击数据填充隐藏的<input>并提交表单。

      这样的事情:

      <form action="view_admit_lookup" method="get">
        <input type="hidden" name="VAL" id="VAL">
        <input type="submit" value="A" onclick="return setVAL('a');">
        <input type="submit" value="A" onclick="return setVAL('a');">
        ...
      </form>
      <script type="text/javascript">
      function setVAL(letter){
        document.getElementById('VAL').value = letter;
        return true;
      }
      </script>
      
    5. 根据您选择的方法,您可以使用$this->params$this->data访问控制器功能中的字母。