2.1 мажорная версия без обратной совместимости. Железобетонно будут убирать. И еще кучу чего, так что простого update до версии 2.1 не ждитеПотому и переписал все контроллеры также: https://github.com/yiisoft/yii2/issues/13922#issue...
$this->request
. Потом просто перепишу конструктор и все, и не бегать по всем методам как дурачок ) Потом подумал, почему с другими необходимыми компонентами не сделать тоже самое? Дело не в $this вовсе. Не в красивости конструкции. Тут под $this подразумевается класс контроллера и обсуждают, что так как request не должен использоваться за его пределами, то и логично его встроить в этот класс.Сдается мне, что этот реквест так и останется в компонентах глобальным, в 2.1 версии, и никуда не денется Ну не в этом суть. Нужен какой-то стандарт, но при этом избежать использования
А у Вас полностью независимый компонент, который можно использовать где угодно. Не стоит сравнивать. И тем более во view пихать его странно.
Yii::$app
. Одно дело когда ты пару сайтов делаешь, другое когда 20 уже есть, и 20 еще на подходе. Потом бегать по всем и исправлять по всем это какой-то ад будет.<?php
namespace app\bootstrap;
use Yii;
use app\models\Setting;
/*
/* The base class that you use to retrieve the settings from the database
*/
class Settings implements \yii\base\BootstrapInterface
{
/**
* Bootstrap method to be called during application bootstrap stage.
* Loads all the settings into the Yii::$app->params array
* @param Application $app the application currently running
*/
public function bootstrap($app)
{
// Get settings from database
$settings = Setting::find()
->all();
// Now let's load the settings into the global params array
foreach ($settings as $val) {
if ($val['module_id'] === '') {
Yii::$app->params[$val['name']] = $val['value'];
} else {
Yii::$app->params[$val['module_id']][$val['name']] = $val['value'];
}
}
}
}
Yii::$app->params[]
и горя не знал )) С этой точки зрения что отдельный компонент, что парамсы все едино, т.к. результат одинаковый, отличается только форма записи. $request = Yii::$app->request;
. Да и потом, при рефакторинге или бегать по всем контроллерам\моделям\вьюхамВы имеете метод зависимый. Будете обращаться к view из модели, как к статике, что бы получить настройку?Нет, в базовую модель тоже засуну, и в контроллер. Может быть
$this->settings
будет содержать ссылку на подключенный компонент(который в свою очередь также будет доступен через Yii::$app->settings
. Тогда оверхеда не должно быть. ну это в любом случае нужно, но зависимость как бы останется и с точки зрения архитектуры это не хорошоИ как быть? Настройки эти нужны иногда и в модулях (которые в свою очередь могут свои настройки иметь). Т.е. туда тоже по идее надо инжектить как-то автоматом при инциализации модуля. Причем если нужно будет иметь к примеру отдельные для модуля настройки, то их вообще отдельно грузить. Но при этом хранить в тойже таблице что и основные (структура которой что-то типа module_id | name | value, чтоб не пересекались основные и модульные настройки).
"Вы искали: " . Yii::$app->request->get('q')
, где q это запрос пользователя.настройки - это глобальная штука, которая может понадобиться в любом контексте, а привязав ко view Вы будете все время дергать View там где это нужно и не нужно.
<?php
namespace app\components;
use Yii;
/**
* Base Class for View
*/
class View extends \yii\web\View
{
public $settings = 'settings';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
// Set settings component
$this->settings = Instance::ensure($this->settings, 'app\components\Settings');
}
}
Насколько я понимаю Вы хотите вынести настройки title всех страниц в единый файл настроек
public function getXpathSubquery($expression, $rel = false, $compile = true)
{
}
Все верно.
Мускул так не умеет и не прощает ошибок в strict mode. Можно конечно отключить его и пользоваться как обычно. Но как по мне лучше писать правильные запросы =)