CakePHP: доступ к «текущей» модели помощника формы, предоставляемой в $ form-> create () - PullRequest
0 голосов
/ 07 января 2011

В моем приложении CakePHP 1.3 мне нужен элемент управления формы:

  1. Состоит из нескольких элементов формы и
  2. Можно использовать в нескольких формах.Я хотел бы избежать дублирования кода, если смогу.

Итак, я создаю элемент, который выводит мой элемент управления формы, и столкнулся с препятствиями, когда дело доходит до заполнения элемента управления значениями надействие редактирования.Теперь, когда вы используете типы полей по умолчанию, CakePHP делает это за вас, но мне нужно получить информацию из $this->data и сделать это самостоятельно в этом случае.

Проблема в том, что $this->dataвыглядит так:

array(
    'Model' => array( /* fields from Model */ ),
    'AnotherModel' => array( /* fields from AnotherModel */ )
);

Внутри моего элемента многократного использования я не знаю, к какой модели принадлежит мое поле.Однако я сообщил эту информацию Помощнику по формам, когда позвонил $form->create() (в представлении, которое включает в себя элемент, который я пишу), так что, похоже, он сможет мне это сказать.И действительно, документация API для класса FormHelper говорит о свойстве defaultModel, но, к сожалению, это свойство пустое.

Теперь простое решение - передать модель в видепараметр.Я могу это сделать.Но я бы хотел избежать раздувания параметров там, где это возможно, и кажется, что это должно быть возможно, но я не могу понять, как это сделать.Есть ли способ?

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 января 2011

Теперь я немного смущен.Я должен был проверить суперклассы перед публикацией.FormHelper наследует от AppHelper, который наследует от Helper, и у Helper есть метод model(), который делает свое дело.

Извлеченный урок.:)

0 голосов
/ 07 января 2011

В шаге от вопроса, но альтернативой будет подкласс FormHelper и добавление пользовательского метода для создания элемента управления:

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

class CustomFormHelper extends FormHelper {
    public function customControl() {
        $control = $this->input(…);
        $control.= $this->checkbox(…);
        return $control;
    }
}
...