有人可以帮助我在错误YiiWidget(v1)

a5g8bdjr  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(178)

我不明白我的代码中哪里有错误。但是我认为是在init()函数中!

var_dump ($this->newsType());

No method or closure named "my" was found in the NewsStream class and its behaviors.
这是NewsStream.php(小部件类)

public function init()
{
    $data = [
        'content' => [],
        'error' => 'Модуль отключен.',
    ];

    if (config('news_stream.allow') == 0) {
        $data = cache()->get(CacheNames::NEWS_STREAM);

        if ($data === false) {
            $data = [];

            try {
                // Подключаюсь к БД
                $this->db = Yii::createComponent([
                    'class' => 'CDbConnection',
                    'connectionString' => 'mysql:host=127.0.0.1;port=3306;dbname=la2worldweb',
                    'enableProfiling' => YII_DEBUG,
                    'enableParamLogging' => true,
                    'username' => 'root',
                    'password' => 'xdemonx1234',
                    'charset' => 'utf8',
                    'emulatePrepare' => true,
                    'tablePrefix' => 'ghtweb',
                ]);

                app()->setComponent('NewsStreamDb', $this->db);

                $newsType = config('news_types.type');

                if (method_exists($this, $newsType)) {
                    $data['content'] = $this->$newsType();

                    foreach ($data['content'] as $k => $v) {
                        $data['content'][$k]['id'] = $this->getNewsLink($v['id']);
                        $data['content'][$k]['title'] = $this->getNewsTitle($v['title']);
                        $data['content'][$k]['updated_at'] = $this->getLastDate($v['updated_at']);
                        $data['content'][$k]['user_id'] = $this->getAuthorId($v['author_id']);
                    }

                    if (30) {
                        cache()->set(CacheNames::NEWS_STREAM, $data, 30 * 60);
                    }
                } else {
                    $data['error'] = 'Метод для обработки форума не найден.';
                }

            } catch (Exception $e) {
                $data['error'] = $e->getMessage();
            }
        }
    }

    app()->controller->renderPartial('//news_stream', $data);
}

这是对该小部件的调用

<div class="icon" id="icon_blue1"></div>
<div class="line_blue">
<h1 class="line">Новости </h1>

<?php $this->widget('app.widgets.NewsStream.NewsStream') ?>

</div>

这就是错误捕捉

new9mtju

new9mtju1#

您正在尝试访问NewsStream类上名为my的方法或属性。此类似乎没有任何具有此名称的属性或get方法。
由于在您的示例中没有使用这种类型的调用的代码,我假设它是在另一个地方完成的,所以请检查您的代码(特别是表单给予的错误),以查看是否有人试图访问类似$newsStreamModel->my的内容。
另外,在widget内部创建CDbConnection组件也不是一件好事。这应该通过配置文件来完成,请阅读官方文档以了解更多信息:Data Access Objects (DAO)
同样,不要在小部件内部执行app()->controller->renderPartial。只需要"echo"输出,并将渲染留给控制器。这就像你的小部件正在尝试做控制器的工作。如果有一天你需要在另一个控制器中使用这个小部件,使用另一种代码,你可能无法做到。

相关问题