День добрый. Начал изучать 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}
На вашем скриншоте с ошибкой сказано, что приложение не может найти класс 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
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости