Почему метод не работает после вызова в другом методе? Здравствуйте! Свойство в классе Controllerpublic static $vars = []; Есть в классе Controller два метода отправки во вьюху данных:public static function set($vars) { self::$vars = $vars; } иpublic static function setMeta($description) { $generator = 'Название сайта'; self::set(compact('generator', 'description')); } Во вьюху передаётся вот так:new View(Controller::$vars); Если вызвать в каком-то другом контроллере вот так:public static function indexAction() { Controller::setMeta('Описание страницы'); // работает, во вьюхе 2 переменных: $generator и $description $test = 'Значение'; // для примера Controller::set(compact('test')); // не работает, во вьюхе нет переменной $test } Если методы поменять местами в вызове, то выполняется всегда один - первый сверху :) Что я накосячил тут? Спасибо.
Проблема здесь заключается в том, что при вызове метода setMeta() вы перезаписываете значение свойства $vars, которое было установлено методом set(), и тем самым теряете данные, которые были установлены при вызове set().
Чтобы решить эту проблему, вам нужно объединить данные, передаваемые обоими методами, перед отправкой их во вьюху. Вы можете изменить метод setMeta() таким образом, чтобы он добавлял значения к уже существующему массиву $vars, а не перезаписывал его. Например, измените метод setMeta() следующим образом:
public static function setMeta($description) { $generator = 'Название сайта'; self::$vars = array_merge(self::$vars, compact('generator', 'description')); }
Теперь при вызове обоих методов в контроллере данные будут корректно объединяться и передаваться во вьюху.
Проблема здесь заключается в том, что при вызове метода setMeta() вы перезаписываете значение свойства $vars, которое было установлено методом set(), и тем самым теряете данные, которые были установлены при вызове set().
Чтобы решить эту проблему, вам нужно объединить данные, передаваемые обоими методами, перед отправкой их во вьюху. Вы можете изменить метод setMeta() таким образом, чтобы он добавлял значения к уже существующему массиву $vars, а не перезаписывал его. Например, измените метод setMeta() следующим образом:
public static function setMeta($description){
$generator = 'Название сайта';
self::$vars = array_merge(self::$vars, compact('generator', 'description'));
}
Теперь при вызове обоих методов в контроллере данные будут корректно объединяться и передаваться во вьюху.