2017-01-12 2 views
2

Я пытаюсь свободно поддерживать постоянные данные между запросами. Очевидно, что база данных - лучший способ сохранить данные, но в этом случае точная правильность крайне неважна.Разве laravel перезагружает классы при каждом звонке?

Я использую статическую переменную в одном из моих контроллеров, но она, кажется, сбрасывается при каждом запросе. Является ли laravel reload clases по каждому запросу?

Пример кода:

class HomeController extends BaseController { 
     public static $test = 0; 


     public function getIndex() { 
       LogHelper::info("TEST: " . HomeController::$test); 
       HomeController::$test = HomeController::$test + 1; 
       return View::make('layouts.home.index'); 
     } 
} 

это последовательно регистрирует 0 при каждом запросе. Есть ли способ поддерживать постоянную переменную без использования базы данных?

EDIT: Мне нужна переменная, которая будет использоваться среди всех пользователей/сеансов. Как счетчик.

+0

использование кеш возможно? или сеанс – Kyslik

+0

@ Kyslik Кто-то сделал сеанс в качестве ответа, но, к сожалению, для меня это не работает. Что это за кеш-решение? – Cruncher

+0

Да, это так ... laravel - это просто скрипт PHP, который выполняется так же, как и любой другой скрипт PHP ... код завершается при завершении выполнения –

ответ

3

Да, Laravel не хранит переменные между запросами и вы должны сохраняться данные вручную с помощью сеансов, DB и т.д.

Например, вы можете сохранить данные с помощью сеансов:

session(['data' => $data]); 

И получить данные в следующем запросе:

$data = session('data'); 

Update

Если вы хотите создать некоторые увеличивающиеся расходы, сохраните данные в конфигурационных файлах, используя один из множества пакетов. Пример /config/my.php конфигурации:

<?php 

return [ 
    'value' => 20, 
]; 

Получить эту информацию из любой части приложения:

$value = config('my.value'); 

Другой способ сохранения данных в БД.

+0

Мне должно было быть ясно, что я хочу, чтобы он был постоянным для всего приложения, а не для пользователя/сеанса. Я отредактирую – Cruncher

+0

@Cruncher посмотрим на обновленную часть ответа. –

+0

Я имел в виду, что он должен быть одинаковым для всех пользователей. Не постоянны, как в неизменном. У меня уже есть файлы конфигурации. Как указано в изменении к моему вопросу, ближайшим примером будет счетчик попаданий (который перезапустится до 0 при перезапуске приложения). – Cruncher

1

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

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

Наиболее распространенным средством предоставления пользователю последовательного опыта между доступом к странице является использование сеансов.В любом PHP скрипт, вы должны быть в состоянии запустить скрипт с этим:

session_start(); 

И тогда вы можете сохранять значения для последующих страниц доступов с помощью $ _SESSION переменных

$_SESSION['my_var'] = "some value"; 

По запросу последующей страницы , вы должны вызвать session_start снова, и тогда вы должны быть в состоянии получить значение, хранящееся в сессии:

session_start(); // gotta call this before setting/getting session values 
echo "my_var is " . $_SESSION['my_var']; 

обработка сессия фактически довольно сложный процесс, который я nvolves генерирует идентификаторы сеанса, выбирает метод хранения и т. д. Более подробно читайте php docs on session handling.

Если вы используете конкретный фреймворк (laravel в вашем случае), вы можете убедиться в том, что пользовательский functions peculiar to that framework может сделать вещи проще.

Смежные вопросы