Intereting Posts
Как сделать выравнивание на консоли в php open_basedir, File () не находится в допустимом пути PHP 5.4: отключить предупреждение «Создание объекта по умолчанию из пустого значения» OpenCart: Где находится div для выпадающей информации корзины заголовков? PHP: имя oci_bind_by_name и timestamp приводит к «ORA-01461: может привязывать значение LONG только для вставки в столбцы LONG» Передавать аргументы из массива в php в конструктор Каждый раз, когда моя почта переходит к спаму в phpmailer php: воссоздать и отобразить изображение из двоичных данных Чтение файла csv в PHP Удалить дубликаты данных в текстовом файле с помощью php Как создать pdf-файл из динамических данных, поступающих из базы данных mysql в php? Извлечение HTML из файла XML с помощью simpleXML Форма Symfony не сохраняет объект с отношением ManyToMany Функция PHP для получения статуса Facebook? PHPUnit: как мне высмеять несколько вызовов методов с несколькими аргументами?

Пользовательский модуль Magento, Неустранимая ошибка: вызов функции-члена setFormAction ()

Когда я ударил свой модуль по этому URL- адресу http: //localhost/xxx/index.php/TradeEnquiry, я получаю эту ошибку

Неустранимая ошибка: вызов функции-члена setFormAction () для не-объекта в C: \ wamp \ www \ stockdisplays \ app \ code \ local \ Stock \ Tradeenquiry \ controllers \ IndexController.php в строке 55

Строка 55 такова:

$this->getLayout()->getBlock('tradeenquiryView') ->setFormAction( Mage::getUrl('*/*/post') ); 

это фрагмент из моего макета xml:

 <default> <reference name="footer_links"> <action method="addLink" translate="label title" module="tradeenquiry"> <label>Trade Enquiry</label> <url>tradeenquiry</url> <title>Trade Enquiry</title> <prepare>true</prepare> </action> </reference> </default> <tradeenquiry_index_index> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> <action method="setHeaderTitle" translate="title" module="tradeenquiry"><title>Trade Enquiry</title></action> </reference> <reference name="content"> <block type="core/template" name="tradeenquiryView" template="tradeenquiry/view.phtml"/> </reference> </tradeenquiry_index_index> по <default> <reference name="footer_links"> <action method="addLink" translate="label title" module="tradeenquiry"> <label>Trade Enquiry</label> <url>tradeenquiry</url> <title>Trade Enquiry</title> <prepare>true</prepare> </action> </reference> </default> <tradeenquiry_index_index> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> <action method="setHeaderTitle" translate="title" module="tradeenquiry"><title>Trade Enquiry</title></action> </reference> <reference name="content"> <block type="core/template" name="tradeenquiryView" template="tradeenquiry/view.phtml"/> </reference> </tradeenquiry_index_index> по <default> <reference name="footer_links"> <action method="addLink" translate="label title" module="tradeenquiry"> <label>Trade Enquiry</label> <url>tradeenquiry</url> <title>Trade Enquiry</title> <prepare>true</prepare> </action> </reference> </default> <tradeenquiry_index_index> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> <action method="setHeaderTitle" translate="title" module="tradeenquiry"><title>Trade Enquiry</title></action> </reference> <reference name="content"> <block type="core/template" name="tradeenquiryView" template="tradeenquiry/view.phtml"/> </reference> </tradeenquiry_index_index> 

Я не понимаю, в чем проблема? блок правильно назван «tradeenquiryView». Единственное, о чем я могу думать, это то, что макет xml кэширован каким-то образом? Как я должен ударить модуль в / TradeEnquiry, а не / tradeenquiry, как я сказал в моем макете xml, так что почти так же, как если бы он использовал более старую версию?

Solutions Collecting From Web of "Пользовательский модуль Magento, Неустранимая ошибка: вызов функции-члена setFormAction ()"

Как и все Magento, это может быть множество причин.

Во-первых, я бы избегал использовать заглавную букву «V» при наименовании ваших блоков. Хотя я не думаю, что это вызовет проблему (поскольку имена являются ссылками на URI (основной / текстовый список и т. Д.) И путь к файлу шаблона (/path/to/template.phtml)), существует соглашение об именах де-факто в макетная система имен нижнего регистра / подчеркивания, которую кто-то, где-то (т.е. Varien) может принять решение, является принудительным соглашением.

Во-вторых, позвонили

 $this->loadLayout(); 

в действии вашего контроллера перед строкой, в которой вы пытаетесь установить действие формы? Пока вы не сделаете это, ваш объект Layout не будет создан и / или не будет ссылаться на ваши объекты блока, что означает

 $this->getLayout()->getBlock('...') 

всегда будет возвращать false.

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

 die(get_class($this->getLayout()->getBlock('root'))); die(get_class($this->getLayout())); 

Наконец, если все это не удается, перейдите к источнику объекта макета

 app/code/core/Mage/Core/Model/Layout.php 

И взгляните на метод getBlock

 public function getBlock($name) { if (isset($this->_blocks[$name])) { return $this->_blocks[$name]; } else { return false; } } 

и начните бросать в операторы отладки, чтобы узнать, можете ли вы понять, почему система не возвращает ссылку на ваш блок. Не забудьте удалить / не проверить свои отладочные операторы, так как это основной системный код.