Yii2 | Получение данных с модели

154
13 декабря 2021, 14:20

День добрый. Начал изучать yii2. Есть вопрос , не могу правильно получить данные с модели в контроллере.

код контроллера

public function actionChanelssetting(){
    if(isAdmin()){
        $model = app\models\ChanelsSetting::find()->count();// не получаются данные
        return $this->render('chanelssetting',[
         'model' => $model,   
        ]);
    }
    else{
     return $this->redirect(['site/index']);   
    }
}

код модели

namespace app\models;
use Yii;
use yii\db\ActiveRecord;
use yii\base\Model;

class ChanelsSetting extends ActiveRecord{
    public static function tableName(){
        return '{{%chanelssetting}}';
    }
    public function rules(){
        return [
            [['id', 'active'], 'integer'],
            [['daily_limit_today ', 'daily_limit_tomorrow'], 'required'],
        ];
    }
    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Название',
            'slug' => 'Сокращенное название',
            'daily_limit_today' => 'Дневной лимит на сегодня',
            'daily_limit_tomorrow' => 'Дневной лимит на завтра',
        ];
    }
}

На выходе получаю ошибку. Если удалить строку с получением данных в контроллере,то вьюха работает, но без данных.

An Error occurred while handling another error:
exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in /home/i/infowe8i/msg.webcom.mobi/models/ChanelsSetting.php on line 42.' in /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response->send()
#2 /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in /home/i/infowe8i/msg.webcom.mobi/models/ChanelsSetting.php on line 42.' in /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /home/i/infowe8i/msg.webcom.mobi/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response->send()
#2 /home/i/infowe8i/msg.webcom.mobi/web/index.php(16): yii\base\Application->run()
#3 {main}
Answer 1

На вашем скриншоте с ошибкой сказано, что приложение не может найти класс app\conttrollers\app\models\ChanelsSetting.

Очевидно, что неверно указано FQCN (Fully Qualified Class Name) класса ChanelsSetting.

В вашем случае, вы забыли добавить знак \ в начало имени класса, и PHP искал его в текущем namespase.

Подробнее о том, что произошло:

Контроллер находится в пространстве имён app\controllers. В коде вы используете класс app\models\ChanelsSetting. Так как в начале нет знака \, PHP считает, что указано относительное имя, а потому добавляет в начало текущее пространство имён

app\controllers + app\models\ChanelsSetting = app\controllers\app\models\ChanelsSetting

Если бы вы указали \ в начале (\app\models\ChanelsSetting) PHP посчитал бы имя абсолютным, и такого недоразумения не было бы.

Подробнее о том, как PHP работает с пространствами имён читайте тут:

https://www.php.net/manual/ru/language.namespaces.php

READ ALSO
Перенаправление и кодировка

Перенаправление и кодировка

есть одностраничник в котором есть форма по типу "оставить заявку" к которой в свою очередь привязан следующий  php скрипт :

349
PHP CURl без внешки

PHP CURl без внешки

В нашей стране очень ограничен внешний трафик либо частенько отваливаетсяЕсть сервер внутренний, NGINX

180
Вывод элементов массива в таблицу(php)

Вывод элементов массива в таблицу(php)

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

177
Yandex.касса и Android SDK

Yandex.касса и Android SDK

Имеет место быть некий сайт с платными услугамиОнлайн реализованы отношения с кассой через API

90