Как передать переменную из контроллера в view [закрыто]
Привет,, я сделал приложение mvc, но у меня есть проблема на время, чтобы передать переменную из контроллера в view. Мой codes:
class Home extends Controller {
public function index() {
$user = $this->loadModel('usersModel');
$row = $user->getUserData(Session::get('user_id'));
$this->loadView('_templates/header');
$this->loadView('home/index');
$this->loadView('_templates/footer');
}
}
, View:
<?php echo $user; ?>
3
Author: Comunidade, 2015-12-19
2 answers
Я только что решаем следующим образом: стал параметр $data в объект, поэтому я смог передать объект user
public function loadView($view, $data = null) {
if($data) {
foreach ($data as $key => $value) {
$this->{$key} = $value;
}
}
require APP . 'view/' . $view . '.php';
}
Вы можете использовать extract
сочетании с func_get_arg()
, что становится похожа на некоторые рамки, популярных и использовать функции anonima (требует php5.3), чтобы получить доступ к области действия класса, как в этом ответе:
Таким образом предотвратит возможность доступа переменные $this
, рекомендую также используйте индукции типов (Type Hinting)
public function loadView($view, array $data = null)
{
$load = function ($data)
{
if (empty($data) === false) {
extract(func_get_arg(0));
}
require APP . 'view/' . $view . '.php';
};
$load($data);
$load = $data = NULL;
}
, доступ в каналы будет выглядеть следующим образом (я считаю, я):
$row = $user->getUserData(Session::get('user_id'));
$this->loadView('home/index', $row);
И home/index.php
и доступ к переменной будет что-то вроде (без необходимости $this
):
<?php echo $user; ?>
0
Author: Guilherme Nascimento, 2017-04-13 12:59:36