Как повторно использовать один и тот же контроллер разными входами формы - PullRequest
0 голосов
/ 08 ноября 2011

Вот часть моего представления:

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.

Вот этот метод в моем контроллере:

<code>function view_admit_lookup($letter) {
    echo "<pre>The letter is: ".$letter."
"; // здесь мы начинаем поиск всего, что нам нужно. If (! Empty ($ this-> data ['Provider'] ['last_name'])) {$ this-> set ('provider ', $ this-> Provider-> find (' all ', массив (' условие '=> массив (' Provider.last_name LIKE '=> $ this-> data [' Provider '] [' last_name '].'% '),' order '=> array (' Provider.last_name ASC ',' Provider.first_name ASC '),)));} // установить заголовок и макет по умолчанию. $ this-> set (' title_for_layout ', 'Admit Lookup'); $ this-> layout = 'default';}

Как я могу "получить" букву, связанную с вводом (кнопка или текстовое поле), и выполнить определенныйоперация на основе этого значения?

1 Ответ

1 голос
/ 08 ноября 2011

Ваш текущий метод добавления действия к $this->Form->button() неверен. Согласно документации Cake, "$ options используется в основном для указания атрибутов HTML-тегов" . Кнопка ввода не имеет атрибута действия. Атрибут action принадлежит элементу формы.

В ответ на ваш комментарий:
Нет смысла $this->Form->button($letter, array('action' => 'view_admit_lookup')); Эта строка Cake должна выдавать следующий HTML:

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

Эта строка HTML не имеет смысла и фактически ничего не сделает. Вам следует ознакомиться с HTML-формами, так как, по-видимому, вы не понимаете, как они работают. Предлагаемое чтение:

Ваша проблема в том, что все кнопки являются частью одной и той же формы, и нет четкого способа отправить письмо, соответствующее нажатой кнопке. 2 способа, которые я думаю, будут работать для вас проще всего ...

  1. HTML
    Создайте отдельный элемент <form> для каждой кнопки. Каждая форма может передать письмо одним из 2 способов:

    1. Добавление соответствующего письма к действию формы.
    2. Добавление соответствующей буквы к скрытому элементу <input> в каждой форме.

    Затем вы меняете свою кнопку со стандартной кнопки <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>
    ...
    
  2. JavaScript
    Имейте элемент 1 <form> со всеми кнопками букв и захватывайте действие каждой кнопки click с помощью функции JavaScript. Используйте эту функцию, чтобы заполнить скрытую <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>
    

В зависимости от выбранного вами метода, вы можете получить доступ к букве в функции вашего контроллера, используя $this->params или $this->data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...