Игра с шаблонами веток (не частью Symfony, в CodeIgniter), и не похоже, что я могу заставить глобальную песочницу работать правильно. Я почти уверен, что делаю что-то глупое, но я действительно не вижу этого.
Функции для работы ветки:
public function twig_setup($configs = NULL)
{
Twig_Autoloader::register();
$env = array(
'cache' => config_item('cache_dir'),
'strict_variables' => TRUE,
'auto_reload' => TRUE,
'extension' => 'php',
'filesystem' => NULL
);
if (!is_null($configs))
{
$env = array_merge($env, $configs);
}
$this->set_extension($env['extension']);
if (is_null($env['filesystem']))
{
$env['filesystem'] = VIEWPATH;
}
else
{
$env['filesystem'] = VIEWPATH .'/'. ltrim($env['filesystem'],'/');
}
$this->set_filesystem($env['filesystem']);
// These two things should not get set to the environment
unset($env['extension']);
unset($env['filesystem']);
$this->set_environment($env);
}
public function set_sandbox($tags, $filters, $methods, $properties, $functions, $is_global = TRUE)
{
$user_policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
$user_sandbox = new Twig_Extension_Sandbox($user_policy, $is_global);
$this->twig->addExtension($user_sandbox);
}
public function disable_logic()
{
$tags = array('for', 'block', 'include');
$filters = array();
$methods = array();
$properties = array();
$functions = array('parent', 'block');
$this->set_sandbox($tags, $filters, $methods, $properties, $functions);
}
Использование:
$twig = new TwigThing();
$twig->twig_setup();
$twig->disable_logic();
Теперь, когда я отображаю шаблон, я не могу использовать что-то вроде raw или url_encode
{{ my_var|url_encode }}
Это должно вывести ошибку или что-то в этом роде, но это просто кодирует переменную ... что я здесь не так делаю?