0

我不。了解我的代码中的错误在哪里。但我认为在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>

这是捕捉错误

在此处输入图像描述

调试

4

1 回答 1

0

您正在尝试访问以类命名的方法或my属性NewsStream。此类似乎没有任何get具有此名称的属性或方法。

由于您的示例中没有此类调用的代码,我假设它是在另一个地方完成的,因此请检查您的代码(尤其是表单给出此错误)以尝试访问类似$newsStreamModel->my.

CDbConnection此外,在小部件中创建组件也不是一件好事。这应该通过配置文件来完成,阅读官方文档了解更多信息:数据访问对象 (DAO)

另外(再次),不要app()->controller->renderPartial在小部件内部进行。只是"echo"输出并将渲染留给您的控制器。就像您的小部件正在尝试完成控制器的工作。如果有一天你需要在另一个控制器中使用这个小部件,使用另一种代码,你可能无法做到。

于 2021-01-04T11:19:56.927 回答