Установка глобально доступного кода в Yii2 для одного запроса

Я использую Yii2 и у меня возникла ситуация, когда я хочу сделать некоторый код глобально доступным, но только для этого запроса.

Мой вариант использования основан на этом вопросе где я делаю некоторые проверки разрешений через файл matchCallback.

Мне нужно запустить несколько разных проверок разрешений, и если я не могу сделать их все в одном месте через matchCallback (потому что я не могу получить доступ ко всем данным, которые мне нужны, кажется, в это конкретное время) - тогда я пытаюсь чтобы не запускать запрос снова.

Итак, мне было интересно, могу ли я хранить данные, извлеченные из базы данных, такие как массив разрешений в кодировке JSON, в моей matchCallback функциональности, чтобы я мог затем получить доступ к этому массиву в другом действии.

Я знаю, что мог бы использовать flash data, но похоже, что это больше подходит для запроса next. Есть ли что-нибудь доступное только для текущего запроса, или я все равно должен использовать flash data?


person Brett    schedule 01.07.2015    source источник
comment
Не могли бы вы просто кэшировать результаты своих запросов и извлекать их позже? Кэширование, кажется, выполняет то, что вы ищете.   -  person Joe Miller    schedule 01.07.2015
comment
@JoeMiller Ну, разве большинство запросов не кэшируются по умолчанию? Однако время для повторного запуска запроса все равно будет намного больше, чем, например, для извлечения данных из глобальной переменной.   -  person Brett    schedule 01.07.2015


Ответы (1)


Интересно, что было бы и здесь лучше всего... Что касается меня, то я бы использовал массив Yii::$app->params для этой цели. Он выглядит не очень хорошо, так как называется «параметры» и должен быть некоторыми пользовательскими параметрами, такими как «adminEmail» и т. д. Но он работает хорошо: он доступен для чтения и записи отовсюду, и если вы установите некоторые из его ключей или значений динамически, он будет long только для этого конкретного запроса - как раз то, что вы хотите. Это как:

Yii::$app->params['myKey'] = $myValue;
...
$myValue = Yii::$app->params['myKey'];
person Pavel Bariev    schedule 01.07.2015
comment
Хм правда. Определенно идея для рассмотрения. Я оставлю это открытым на некоторое время и посмотрю, есть ли смысл делать это, но это может привести к необходимости использовать это решение. Ваше здоровье! - person Brett; 01.07.2015
comment
Да, я бы тоже был рад увидеть лучший выбор. - person Pavel Bariev; 01.07.2015