Как передать переменную из контроллера в 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';
}
 2
Author: , 2015-12-20 17:59:13

Вы можете использовать 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