Метод JViewLegacy :: getForm отлично работает в компоненте администратора, а метод не найден в интерфейсе
Я столкнулся с какой-то странной проблемой. У меня есть аналогичная настройка для моего компонента как на внешнем, так и на внешнем компонентах. Вот моя подпись класса вида.
MyComponentViewForm extends JViewLegacy
Теперь в моем view.html.php, я var_dump $this->getForm()
,
- Прекрасно работает и выгружает объект из класса представления компонента admin
-
Fatal error: Call to undefined method
ошибка в классе класса front-end.
Любые идеи?
2 ответа
Я не уверен, насколько это правильно, но я решил эту проблему, добавив прокси-метод в свой view.html.php:
public function getForm()
{
if (!is_object($this->form))
{
$this->form = $this->get('Form');
}
return $this->form;
}
Я не уверен, почему класс представления вызывает метод getForm для представления вместо модели. Это все еще неизвестный мне вопрос. Странная часть $this->get('Form')
внутри этого прокси-метода снова вызывает метод в модели. Если у кого-нибудь есть лучшее решение, пожалуйста, дайте мне знать, я ненавижу эти хаки.
это не потому, что проблема в вашем представлении.
Вам нужно убедиться, что ваша модель расширяет JModelForm
(или JModelAdmin
) и реализовать метод getForm
:
YourComponentModelForm extends JModelForm
{
public function getForm($data = array(), $loadData = true)
{
$form = $this->loadForm('com_yourcomponent.formname', 'formname', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
}