mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Improve accessor: add writable condition
This commit is contained in:
parent
ef4458ca10
commit
e0fc70b751
@ -19,6 +19,7 @@ use Fenom\Template;
|
|||||||
class Fenom
|
class Fenom
|
||||||
{
|
{
|
||||||
const VERSION = '2.4';
|
const VERSION = '2.4';
|
||||||
|
const REV = 1;
|
||||||
/* Actions */
|
/* Actions */
|
||||||
const INLINE_COMPILER = 1;
|
const INLINE_COMPILER = 1;
|
||||||
const BLOCK_COMPILER = 5;
|
const BLOCK_COMPILER = 5;
|
||||||
@ -797,6 +798,18 @@ class Fenom
|
|||||||
return $this->_options;
|
return $this->_options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add global accessor ($.)
|
||||||
|
* @param string $name
|
||||||
|
* @param callable $parser
|
||||||
|
* @return Fenom
|
||||||
|
*/
|
||||||
|
public function addAccessor($name, $parser)
|
||||||
|
{
|
||||||
|
$this->_accessors[$name] = $parser;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add global accessor ($.)
|
* Add global accessor ($.)
|
||||||
* @param string $name
|
* @param string $name
|
||||||
@ -804,8 +817,7 @@ class Fenom
|
|||||||
* @param string $parser
|
* @param string $parser
|
||||||
* @return Fenom
|
* @return Fenom
|
||||||
*/
|
*/
|
||||||
public function addAccessor($name, $accessor, $parser = self::ACCESSOR_CUSTOM)
|
public function addAccessorSmart($name, $accessor, $parser) {
|
||||||
{
|
|
||||||
$this->_accessors[$name] = array(
|
$this->_accessors[$name] = array(
|
||||||
"accessor" => $accessor,
|
"accessor" => $accessor,
|
||||||
"parser" => $parser
|
"parser" => $parser
|
||||||
|
@ -741,7 +741,16 @@ class Compiler
|
|||||||
*/
|
*/
|
||||||
public static function setOpen(Tokenizer $tokens, Tag $scope)
|
public static function setOpen(Tokenizer $tokens, Tag $scope)
|
||||||
{
|
{
|
||||||
$var = $scope->tpl->parseVariable($tokens);
|
if($tokens->is(T_VARIABLE)) {
|
||||||
|
$var = $scope->tpl->parseVariable($tokens);
|
||||||
|
} elseif($tokens->is('$')) {
|
||||||
|
$var = $scope->tpl->parseAccessor($tokens, $is_var);
|
||||||
|
if(!$is_var) {
|
||||||
|
throw new InvalidUsageException("Accessor is not writable");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new InvalidUsageException("{set} and {add} accept only variable");
|
||||||
|
}
|
||||||
$before = $after = "";
|
$before = $after = "";
|
||||||
if($scope->name == 'add') {
|
if($scope->name == 'add') {
|
||||||
$before = "if(!isset($var)) {\n";
|
$before = "if(!isset($var)) {\n";
|
||||||
|
@ -12,7 +12,7 @@ class SandboxTest extends TestCase {
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
$this->fenom->setOptions(\Fenom::FORCE_VERIFY);
|
$this->fenom->setOptions(\Fenom::FORCE_VERIFY);
|
||||||
$this->fenom->addAccessor('q', 'Navi::$q', \Fenom::ACCESSOR_VAR);
|
$this->fenom->addAccessorSmart('q', 'Navi::$q', \Fenom::ACCESSOR_VAR);
|
||||||
// $this->assertEquals([1, 2, 4, "as" => 767, "df" => ["qert"]], [1, 2, 4, "as" => 767, "df" => ["qet"]]);
|
// $this->assertEquals([1, 2, 4, "as" => 767, "df" => ["qert"]], [1, 2, 4, "as" => 767, "df" => ["qet"]]);
|
||||||
// $this->fenom->addBlockCompiler('php', 'Fenom\Compiler::nope', function ($tokens, Tag $tag) {
|
// $this->fenom->addBlockCompiler('php', 'Fenom\Compiler::nope', function ($tokens, Tag $tag) {
|
||||||
// return '<?php ' . $tag->cutContent();
|
// return '<?php ' . $tag->cutContent();
|
||||||
@ -20,7 +20,7 @@ class SandboxTest extends TestCase {
|
|||||||
// $this->tpl('welcome.tpl', '{$a}');
|
// $this->tpl('welcome.tpl', '{$a}');
|
||||||
// var_dump($this->fenom->compileCode('{set $a=$one|min:0..$three|max:4}')->getBody());
|
// var_dump($this->fenom->compileCode('{set $a=$one|min:0..$three|max:4}')->getBody());
|
||||||
try {
|
try {
|
||||||
var_dump($this->fenom->compileCode('{$.q.ddqd->d() + 333}')->getBody());
|
var_dump($this->fenom->compileCode('{set $.q.ddqd->d() = 333}')->getBody());
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
print_r($e->getMessage() . "\n" . $e->getTraceAsString());
|
print_r($e->getMessage() . "\n" . $e->getTraceAsString());
|
||||||
while ($e->getPrevious()) {
|
while ($e->getPrevious()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user