Mage::getModel возвращает false

Я пытаюсь разобраться с вызовом и использованием моделей в magento.

Моя текущая задача — просто отобразить строку, хранящуюся в модели, вызвав ее из контроллера.

При попытке вызвать SimpleOutput.php я получаю сообщение об ошибке, в котором говорится, что был вызван не объект. Я сделал var_dump, как вы увидите, и он вернул false.

Я просмотрел свой код и с моим ограниченным пониманием того, что мне нужно делать в Magento, у меня все правильно. Очевидно, я что-то упускаю. Может кто-нибудь посмотреть, и если это опечатка, скажите, где искать, и если это больше, чем простая орфографическая ошибка, объясните, что я пропустил, что я должен был сделать и почему?

Мой код ниже

Ц/Firstmodule/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
    <Ts_Firstmodule>
        <version>0.1.0</version>
    </Ts_Firstmodule>
</modules>

<models>
    <firstmodule>
        <class>Ts_Firstmodule_Model</class>
    </firstmodule>
</models>

<frontend>
    <routers>
        <firstmodule>
            <use>standard</use>
            <args>
                <module>Ts_Firstmodule</module>
                <frontName>firstmodule</frontName>
            </args>
        </firstmodule>
    </routers>
</frontend>
</config>

Ц/Firstmodule/контроллеры/indexController.php

class Ts_Firstmodule_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
    $simple = Mage::getModel('ts_firstmodule/simpleoutput');
    var_dump($simple);
}
}

Ц/Firstmodule/модель/simpleoutput.php

class Ts_Firstmodule_Model_SimpleOutput extends Mage_Core_Model_Abstract
{
public function basicText()
{
    echo 'this is some text from the simple output model inside the basic text function';
}
}

person tony09uk    schedule 11.07.2013    source источник


Ответы (3)


Вы должны обернуть <models> в <global>, вот так:

<global>
    <models>
        <firstmodule>
            <class>Ts_Firstmodule_Model</class>
        </firstmodule>
    </models>
</global>

Не стесняйтесь взглянуть на исходный код более простых основных модулей (например, GoogleAnalytics), чтобы увидеть, как они сделаны, и понять логику, стоящую за этим.

person blmage    schedule 11.07.2013
comment
Спасибо, это сработало. Что касается просмотра кода простых модулей, я начну с топовой идеи. - person tony09uk; 11.07.2013

Как всегда :

Mage::getModel('ts_firstmodule/simpleoutput');

Когда вы делаете getModel/getBlock/helper/etc

Первая часть строки параметра — это XML-узел слоя, определенного в config.xml. Вторая часть — это полный путь к вашему файлу из контейнера папки слоя.

Итак, в вашем случае: Mage::getModel('firstmodule/simpleoutput'); должен загрузить Ts/Firstmodule/Model/Simpleoutput.php

Примечание: будьте осторожны с вашими ресурсами (взгляните на стандартный magento для хорошей практики)!

person Jscti    schedule 11.07.2013

Вы должны изменить файл config.xml и добавить тег <global> вокруг вашего тега <models>:

<global>
    <models>
        <firstmodule>
            <class>Ts_Firstmodule_Model</class>
        </firstmodule>
    </models>
<global>

После этого, чтобы создать экземпляр модели, используйте ее следующим образом:

Mage::getModel('firstmodule/simpleoutput')

Первой частью метода getModel (до /) должно быть имя тега, которое вы установили в config.xml прямо под тегом <models>. В вашем случае firstmodule.

person Marius    schedule 11.07.2013