Я включаю несколько шаблонов в цикле, используя
@include('template.included')
Прежде чем включать этот шаблон, я определяю
$page = 0;
и внутри шаблона, несколько раз он вызывает
$page++;
Внутри включенного шаблона значение правильно увеличивается, но вне шаблона кажется, что переменная $ page остается прежней – она похожа на @include, создает свою собственную копию каждого используемого вами var.
Мне нужна эта переменная $ page для обновления внутри этих шаблонов, и ее значение возвращается обратно к моему основному шаблону – я пропустил что-то простое?
Цените любые предложения!
РЕДАКТИРОВАТЬ:
Моя проблема, например:
$page = 0; @include('template.included') //This calls $page++ 5 times echo $page; //returns 0
Мне нужно $ page для возврата 4, а не 0
Ваше предположение верно, система просмотра Laravel создает новую область для каждого загружаемого вида. Метод Illuminate\View\Factory::make()
который используется при включении представлений, делает следующее:
new View($this, $this->getEngineFromPath($path), $view, $path, $data)
Он создает новое представление и передает ему данные, что фактически означает, что он отправляет копию информации. Поскольку аргументы не передаются по ссылке (которая устарела и в новых версиях PHP уже удалена), то, что вы хотите, не может быть выполнено.
При этом ваш подход кажется ошибочным. Мне кажется, что вы строите разбивку на страницы в представлении, что вам не следует делать. Laravel уже предлагает очень простой способ создания Pagination , вы должны, возможно, изучить это.