mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Add predefined accessors Fenom::ACCESSOR_PROPERY and Fenom::ACCESSOR_METHOD
This commit is contained in:
parent
bf44511a53
commit
4fe339ba21
@ -7,8 +7,8 @@ require_once __DIR__.'/../tests/tools.php';
|
||||
|
||||
$fenom = Fenom::factory(__DIR__.'/templates', __DIR__.'/compiled');
|
||||
$fenom->setOptions(Fenom::AUTO_RELOAD | Fenom::FORCE_COMPILE);
|
||||
$fenom->addAccessorSmart('g', 'App::$q->get', Fenom::ACCESSOR_CALL);
|
||||
var_dump($fenom->compileCode('{$.g("env")}')->getBody());
|
||||
$fenom->addAccessorSmart('fetch', 'fetch', Fenom::ACCESSOR_METHOD);
|
||||
var_dump($fenom->compileCode('{$.fetch("template.tpl")}')->getBody());
|
||||
//var_dump($fenom->compile("bug158/main.tpl", [])->getTemplateCode());
|
||||
//var_dump($fenom->display("bug158/main.tpl", []));
|
||||
// $fenom->getTemplate("problem.tpl");
|
@ -54,9 +54,11 @@ class Fenom
|
||||
|
||||
const MAX_MACRO_RECURSIVE = 32;
|
||||
|
||||
const ACCESSOR_CUSTOM = null;
|
||||
const ACCESSOR_VAR = 'Fenom\Accessor::parserVar';
|
||||
const ACCESSOR_CALL = 'Fenom\Accessor::parserCall';
|
||||
const ACCESSOR_CUSTOM = null;
|
||||
const ACCESSOR_VAR = 'Fenom\Accessor::parserVar';
|
||||
const ACCESSOR_CALL = 'Fenom\Accessor::parserCall';
|
||||
const ACCESSOR_PROPERTY = 'Fenom\Accessor::parserProperty';
|
||||
const ACCESSOR_METHOD = 'Fenom\Accessor::parserMethod';
|
||||
|
||||
public static $charset = "UTF-8";
|
||||
|
||||
@ -815,7 +817,7 @@ class Fenom
|
||||
/**
|
||||
* Add global accessor ($.)
|
||||
* @param string $name
|
||||
* @param callable|string $accessor
|
||||
* @param mixed $accessor
|
||||
* @param string $parser
|
||||
* @return Fenom
|
||||
*/
|
||||
|
@ -28,16 +28,53 @@ class Accessor {
|
||||
'env' => '$_ENV'
|
||||
);
|
||||
|
||||
public static function parserVar($var, Tokenizer $tokens, Template $tpl, &$is_var) {
|
||||
/**
|
||||
* @param string $var variable expression on PHP ('App::get("storage")->user')
|
||||
* @param Tokenizer $tokens
|
||||
* @param Template $tpl
|
||||
* @param $is_var
|
||||
* @return string
|
||||
*/
|
||||
public static function parserVar($var, Tokenizer $tokens, Template $tpl, &$is_var)
|
||||
{
|
||||
$is_var = true;
|
||||
return $tpl->parseVariable($tokens, $var);
|
||||
}
|
||||
|
||||
|
||||
public static function parserCall($call, Tokenizer $tokens, Template $tpl) {
|
||||
/**
|
||||
* @param string $call method name expression on PHP ('App::get("storage")->getUser')
|
||||
* @param Tokenizer $tokens
|
||||
* @param Template $tpl
|
||||
* @return string
|
||||
*/
|
||||
public static function parserCall($call, Tokenizer $tokens, Template $tpl)
|
||||
{
|
||||
return $call.$tpl->parseArgs($tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $prop fenom's property name
|
||||
* @param Tokenizer $tokens
|
||||
* @param Template $tpl
|
||||
* @param $is_var
|
||||
* @return string
|
||||
*/
|
||||
public static function parserProperty($prop, Tokenizer $tokens, Template $tpl, &$is_var)
|
||||
{
|
||||
return self::parserVar('$tpl->getStorage()->'.$prop, $tokens, $tpl, $is_var);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $method fenom's method name
|
||||
* @param Tokenizer $tokens
|
||||
* @param Template $tpl
|
||||
* @return string
|
||||
*/
|
||||
public static function parserMethod($method, Tokenizer $tokens, Template $tpl)
|
||||
{
|
||||
return self::parserCall('$tpl->getStorage()->'.$method, $tokens, $tpl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accessor for global variables
|
||||
* @param Tokenizer $tokens
|
||||
@ -70,6 +107,9 @@ class Accessor {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function version()
|
||||
{
|
||||
return 'Fenom::VERSION';
|
||||
|
@ -227,4 +227,33 @@ class AccessorTest extends TestCase
|
||||
public function testFetchInvalidTpl($tpl, $exception, $message) {
|
||||
$this->execError($tpl, $exception, $message);
|
||||
}
|
||||
|
||||
public function getThree() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
public static function providerSmartAccessor() {
|
||||
return array(
|
||||
['acc', '$tpl->getStorage()->test->values', \Fenom::ACCESSOR_VAR, '{$.acc.three}', '3'],
|
||||
['acc', '$tpl->getStorage()->test->getThree', \Fenom::ACCESSOR_CALL, '{$.acc()}', '3'],
|
||||
['acc', 'three', \Fenom::ACCESSOR_PROPERTY, '{$.acc}', '3'],
|
||||
['acc', 'templateExists', \Fenom::ACCESSOR_METHOD, '{$.acc("persist:pipe.tpl")}', '1']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group testSmartAccessor
|
||||
* @dataProvider providerSmartAccessor
|
||||
* @param $name
|
||||
* @param $accessor
|
||||
* @param $type
|
||||
* @param $code
|
||||
* @param $result
|
||||
*/
|
||||
public function testSmartAccessor($name, $accessor, $type, $code, $result) {
|
||||
$this->fenom->test = $this;
|
||||
$this->fenom->three = 3;
|
||||
$this->fenom->addAccessorSmart($name, $accessor, $type);
|
||||
$this->assertRender($code, $result, $this->getVars());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user