Я собрал минимальный MVC для PHP, вдохновленный Pylons. Мои контроллеры выглядят так:
<?php
defined('__CORE__') or die('no direct access');
class Demo extends BaseController
{
public function hello($args)
{
return parent::render('hello_tmpl', array('foo' => 'bar'));
}
}
?>
<?php
defined('__CORE__') or die('no direct access');
class BaseController
{
public function render($template, $vars=FALSE)
{
// Load up some global variables to put into the template's scope
global $map;
if ($vars !== FALSE)
extract($vars);
// Load up the template file's contents and save to the $_body variable
// This variable will be utilized in base.html
ob_start();
include VIEW . '/' . $template . '.phtml';
$_body = ob_get_contents();
ob_end_clean();
require_once(VIEW . '/base.php');
}
}
?>
У меня возникли проблемы с предложением хорошего способа представления глобальных переменных в представлении. $map
- сопоставитель маршрутов, определенный в другом файле. Я бы хотел, чтобы это было открыто для View и Controllers, чтобы я мог использовать $map->url_for('home_page')
.
Какой изящный способ сделать это? В идеале я хотел бы, чтобы это происходило в BaseController, чтобы я мог сделать что-то вроде:
public function hellp($args)
{
$home_page = parent::$map->url_for();
}
А также доступ к $map
из представления.