Laravel 5.6 - глобальная и динамическая переменная - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть API с laravel 5.6, и мне нужно создать глобальные переменные, значения которых могут изменяться во всем приложении, однако у меня возникают проблемы.

Пример: - При первом запросе значениеэта переменная как «тест»;- Во втором запросе я хочу получить текущее значение, которое должно быть «test»;

  1. Я пытался изначально использовать конфиг, но он не работал;
  2. Iпытался использовать Session, но у меня возникла та же проблема:
  3. Я пытался установить переменную в «суперконтроллере», где все контроллеры распространялись на него, она не работала.

Значение переменной допустимо только во время выполнения запроса, то есть я делаю запрос к контроллеру aaaControler, для этого используются другие контроллеры, в рамках того же запроса значение сохраняется, но заканчивается возвратом.

Я думал о сохранении в базе данных, создании ссылки и постоянном получении этого значения, но будет ли это лучшим способом?

Я прошу помощи в этом вопросе.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Дело в том, что каждый ваш запрос API является совершенно новым запросом, проходящим полный цикл от index.php до JSON (или другого) -ответа.Чтобы сохранить переменную между существенно разными запросами, вам придется использовать базу данных, хранилище файлов или сеансы (с некоторыми примечаниями).

0 голосов
/ 27 ноября 2018

Если вам нужна «глобальная» переменная только для одного запроса, доступная в каждом классе вашего проекта, я думаю, что хорошим решением является установка значения конфигурации во время выполнения.Помощник config может использоваться как для чтения, так и для записи значения, которое не будет сохраняться при другом запросе.

Вы можете установить значение где угодно:

config(['any.key.you.want' => 'Some value']);

И прочитать еговезде:

config('any.key.you.want');
=> 'Some value'

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

Если вы используете другие контроллеры, использующие HTTP-запросы, он не будет работать.Если это ваш случай, вероятно, лучшее решение - сохранить его в базе данных - как вы предложили - или использовать сеанс.Вы сохраняете значение с помощью одного из них, а затем очищаете после ваших HTTP-запросов:

session()->put('any.key.you.want', 'Some value');
// make http request to another controller
session()->forget('any.key.you.want');

В контроллере, вызываемом по HTTP-запросу, вы можете получить значение сеанса:

session('any.key.you.want');
=> 'Some value'

Если ваш HTTP-запрос асинхронный, вы, вероятно, столкнетесь с некоторыми условиями гонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...