vova07 / yii2-start

Yii2-Start application
Other
274 stars 115 forks source link

Встраивание модуля блога в страницу #117

Closed y0rker closed 9 years ago

y0rker commented 9 years ago

Проблема была в том, что нельзя было встраивать модуль в другую страницу. Ошибку выдавало:

Trying to get property of non-object

Вот тут:

'uploadBehavior' => [
                'class' => UploadBehavior::className(),
                'attributes' => [
                    'preview_url' => [
                        'path' => $this->module->previewPath,
                        'tempPath' => $this->module->imagesTempPath,
                        'url' => $this->module->previewUrl
                    ],
                    'image_url' => [
                        'path' => $this->module->imagePath,
                        'tempPath' => $this->module->imagesTempPath,
                        'url' => $this->module->imageUrl
                    ]
                ]

На строках $this->module->previewPath и тд Все это происходит в модели блогов.

Помогло переписывание ModuleTrait.php для блогов

public function getModule()
    {
        if ($this->_module === null) {
            $module = Module::getInstance();
            if ($module instanceof Module) {
                $this->_module = $module;
            } else {
                $this->_module = Yii::$app->getModule('blogs');
            }
        }
        /* Старый код
        if ($this->_module === null) {
            $this->_module = Module::getInstance();
        }
        */
        return $this->_module;
    }

В общем вопрос вот в чем: правильно ли это я сделал, если да, то наверное стоит пулл реквест делать.

Заранее спасибо!

vova07 commented 9 years ago

Не понял до конца про какую страницу идет речь, но перекрытие трэйта некорректное решение. Подразумевается что данный трэйт должен работать без каких либо правок. Ошибка возможно в том что вызывается модель из вне модуля, и тем самым в момент вызова активен другой модуль у которого нет этих свойств. Если это так, и вам именно так нужно устроить работу, то в таком случае решение становится корректным и правильным для вашей ситуации.

y0rker commented 9 years ago

Спасибо за ответ!