Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
needsEnvironment example
parent::
__construct
(
[
'arguments' =>
$arguments
]
,
[
'name' =>
$name
, 'is_defined_test' => false
]
,
$lineno
)
;
}
public
function
compile
(
Compiler
$compiler
)
{
$name
=
$this
->
getAttribute
(
'name'
)
;
$function
=
$compiler
->
getEnvironment
(
)
->
getFunction
(
$name
)
;
$this
->
setAttribute
(
'name',
$name
)
;
$this
->
setAttribute
(
'type', 'function'
)
;
$this
->
setAttribute
(
'needs_environment',
$function
->
needsEnvironment
(
)
)
;
$this
->
setAttribute
(
'needs_context',
$function
->
needsContext
(
)
)
;
$this
->
setAttribute
(
'arguments',
$function
->
getArguments
(
)
)
;
$callable
=
$function
->
getCallable
(
)
;
if
(
'constant' ===
$name
&&
$this
->
getAttribute
(
'is_defined_test'
)
)
{
$callable
= 'twig_constant_is_defined';
}
$this
->
setAttribute
(
'callable',
$callable
)
;
$this
->
setAttribute
(
'is_variadic',
$function
->
isVariadic
(
)
)
;
$this
->
compileCallable
(
$compiler
)
;
}
}
elseif
(
\
function_exists
(
$cb
)
)
{
$refl
=
new
\
ReflectionFunction
(
$cb
)
;
}
elseif
(
\
is_string
(
$cb
)
&&
preg_match
(
'{^(.+)::(.+)$}',
$cb
,
$m
)
&&
method_exists
(
$m
[
1
]
,
$m
[
2
]
)
)
{
$refl
=
new
\
ReflectionMethod
(
$m
[
1
]
,
$m
[
2
]
)
;
}
else
{
throw
new
\
UnexpectedValueException
(
'Unsupported callback type.'
)
;
}
$args
=
$refl
->
getParameters
(
)
;
// filter out context/environment args
if
(
$entity
->
needsEnvironment
(
)
)
{
array_shift
(
$args
)
;
}
if
(
$entity
->
needsContext
(
)
)
{
array_shift
(
$args
)
;
}
if
(
'filters' ===
$type
)
{
// remove the value the filter is applied on
array_shift
(
$args
)
;
}
parent::
__construct
(
[
'node' =>
$node
, 'filter' =>
$filterName
, 'arguments' =>
$arguments
]
,
[
]
,
$lineno
,
$tag
)
;
}
public
function
compile
(
Compiler
$compiler
)
: void
{
$name
=
$this
->
getNode
(
'filter'
)
->
getAttribute
(
'value'
)
;
$filter
=
$compiler
->
getEnvironment
(
)
->
getFilter
(
$name
)
;
$this
->
setAttribute
(
'name',
$name
)
;
$this
->
setAttribute
(
'type', 'filter'
)
;
$this
->
setAttribute
(
'needs_environment',
$filter
->
needsEnvironment
(
)
)
;
$this
->
setAttribute
(
'needs_context',
$filter
->
needsContext
(
)
)
;
$this
->
setAttribute
(
'arguments',
$filter
->
getArguments
(
)
)
;
$this
->
setAttribute
(
'callable',
$filter
->
getCallable
(
)
)
;
$this
->
setAttribute
(
'is_variadic',
$filter
->
isVariadic
(
)
)
;
$this
->
compileCallable
(
$compiler
)
;
}
}