Почему метод не работает после вызова в другом методе? Здравствуйте!
Свойство в классе 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
}
Если методы поменять местами в вызове, то выполняется всегда один - первый сверху :)
Что я накосячил тут?
Спасибо.

21 Авг 2019 в 06:58
152 +1
1
Ответы
1

Проблема здесь заключается в том, что при вызове метода setMeta() вы перезаписываете значение свойства $vars, которое было установлено методом set(), и тем самым теряете данные, которые были установлены при вызове set().

Чтобы решить эту проблему, вам нужно объединить данные, передаваемые обоими методами, перед отправкой их во вьюху. Вы можете изменить метод setMeta() таким образом, чтобы он добавлял значения к уже существующему массиву $vars, а не перезаписывал его. Например, измените метод setMeta() следующим образом:

public static function setMeta($description)
{
$generator = 'Название сайта';
self::$vars = array_merge(self::$vars, compact('generator', 'description'));
}

Теперь при вызове обоих методов в контроллере данные будут корректно объединяться и передаваться во вьюху.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир