Здравствуйте. Практикуюсь, пишу свою MVC и у меня появилась проблема в передаче переменных из контроллера во вьюху. Есть такой код: Код (Text): class TestController{ public $property = 'Это выводится во вьюхе нормально'; public function testAction(){ $var = 'Это значение мне нужно передать во вьюху'; $this->render('test.php'); } } Как Вы догадались это обычный action некого контроллера, в котором рендерится вьюха. Проблема в том, что если в о вьюхе написать echo $var; то это не сработает и интерпретатор выдаст ошибку уровня Notice(Undefined variable). А вот если к примеру вместо $var писать $this->property, тоесть обратиться из вьюхи к свойству текущего контроллера, тогда это сработает. Пример вьюхи Код (Text): <h1>Вьюха для Test Controller</h1> echo $var;//undefined variable echo $this->property;//Все в порядке, значение выводится во вьюху Собственно вопрос, почему так происходит? Ведь переменные по сути это хранилище для каких либо значений, фактически я обращаюсь к определенным значениям из одинаковой области видимости, но переменная определенная в методе почему то не отрабатывает во вьюхе, а свойство класса в отличии от этой переменной считается определенным. Хотелось бы как то исправить этот момент, не хочу создавать лишние свойства в контроллере, передавая им значения из методов, которые потом придется вызывать через $this во вьюхе. ЗЫ: Переменная определена(ничего не путаю). Спасибо
чего свое пишете? MVC? в yii например работает так: Код (Text): $params = [ 'var' => 'Это значение мне нужно передать во вьюху' ]; $this->render('test.php', $params);
Так интересно, $var - локальная переменная, с чего она будет куда-то в другую функцию передаваться? Надо передать. Либо так, как zelinin показал, либо вот так можно: Код (PHP): class Template { protected $data; public function assign($name, $value) { $this->data[$name] = $value; } public function render($filename) { if ($this->data) extract($this->data); ob_start(); require_once(TEMPLATE_DIR . "/$filename"); $content = ob_get_contents(); ob_end_clean(); return $content; } } Затем использование: Код (PHP): $templ = new Template; $templ->assign("var", "Это значение передаём по вьюху"); $templ->assign("test", "Ещё одно значение передаём куда надо"); echo $templ->render("test.php"); Примерно такой подход в Open Cart используется.