Intereting Posts
Спотизировать автоматическое управление списком воспроизведения с помощью PHP-back-end и ограничений по скорости Только переменные должны передаваться по ссылке … в строке 13 Fail Такая же строка, разные значения хэша SHA1, полученные из VB.net и PHP Есть ли простой способ «получить» размер изображения в PHP без javascript? Получить контент (текст) URL-адреса после запуска Javascript с помощью PHP Мета-боксы WordPress – учебник WP tuts Запретить cookie при запуске скрипта из CLI в codeigniter Установка pThreads в Windows SimpleXML: выбор элементов, имеющих определенное значение атрибута Что происходит, когда я ставил косую черту (/) после URL-адреса .php? отправка электронной почты со всеми продуктами из корзины Как создать уникальный идентификатор сеанса в php merge_array возвращает null, если один или несколько массивов пуст? PHP / codeigniter – использование exit () Профиль медленных страниц PHP в производстве

Отобразить представление в PHP

Я пишу свою собственную структуру MVC и пришел к визуализатору вида. Я устанавливаю vars в своем контроллере в объект View, а затем получаю vars по echo $ this-> myvar в сценарии .phtml.

В моем default.phtml я вызываю метод $ this-> content () для вывода viewcript.

Так я это делаю сейчас. Это правильный способ сделать это?

class View extends Object { protected $_front; public function __construct(Front $front) { $this->_front = $front; } public function render() { ob_start(); require APPLICATION_PATH . '/layouts/default.phtml' ; ob_end_flush(); } public function content() { require APPLICATION_PATH . '/views/' . $this->_front->getControllerName() . '/' . $this->_front->getActionName() . '.phtml' ; } } 

Вот пример того, как я это сделал:

 <?php class View { private $data = array(); private $render = FALSE; public function __construct($template) { try { $file = ROOT . '/templates/' . strtolower($template) . '.php'; if (file_exists($file)) { $this->render = $file; } else { throw new customException('Template ' . $template . ' not found!'); } } catch (customException $e) { echo $e->errorMessage(); } } public function assign($variable, $value) { $this->data[$variable] = $value; } public function __destruct() { extract($this->data); include($this->render); } } ?> 

Я использую функцию назначения из своего контроллера для назначения переменных, а в деструкторе я извлекаю этот массив, чтобы сделать их локальными переменными в представлении.

Не стесняйтесь использовать это, если хотите, я надеюсь, что это даст вам представление о том, как вы можете это сделать

Вот полный пример:

 class Something extends Controller { public function index () { $view = new view('templatefile'); $view->assign('variablename', 'variable content'); } } 

И в вашем файле вида:

 <?php echo $variablename; ?> 

Пример простого класса вида. Действительно похож на ваш и Дэвид Эрикссон.

 <?php /** * View-specific wrapper. * Limits the accessible scope available to templates. */ class View{ /** * Template being rendered. */ protected $template = null; /** * Initialize a new view context. */ public function __construct($template) { $this->template = $template; } /** * Safely escape/encode the provided data. */ public function h($data) { return htmlspecialchars((string) $data, ENT_QUOTES, 'UTF-8'); } /** * Render the template, returning it's content. * @param array $data Data made available to the view. * @return string The rendered template. */ public function render(Array $data) { extract($data); ob_start(); include( APP_PATH . DIRECTORY_SEPARATOR . $this->template); $content = ob_get_contents(); ob_end_clean(); return $content; } } ?> 

Функции, определенные в классе, будут доступны в представлении следующим образом:

 <?php echo $this->h('Hello World'); ?>