Twig: рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкрд╣реБрдВрдЪ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЕрдкреНрд░реИрд▓ 2010  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: twigphp/Twig

obj ['prop'] рдХреЗрд╡рд▓ рддрднреА рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрдм obj рд╕рд░рдгреА рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЪрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рд╣реИ: obj [propName] рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рддреБрдо рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реЛ
{{ attribute(object, method) }}
{{attribute(obj, foo)}}
http://twig.sensiolabs.org/doc/2.x/functions/attribute.html

рд╕рднреА 17 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдЗрд╕рд▓рд┐рдП obj.name рдкрд╣рд▓реЗ рдПрдХ obj ['name'] рдХреЗ рд▓рд┐рдП рджрд┐рдЦреЗрдЧрд╛ рдлрд┐рд░ obj->name рдФрд░ last obj->getName() рдЗрд╕реЗ рдЖрдЧреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рднреА рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдбрд┐рдЬрд╛рдЗрдирд░ рдЕрдзреНрдпрд╛рдп рдХреЗ рд▓рд┐рдП рдЯрд╣рдиреА рдХреЗ рддрд╣рддред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░реНрдЯреАрд╡ рдХрд╛ рдореБрджреНрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реИ, рдХреЗрд╡рд▓ рдСрдлрд╝рд╕реЗрдЯ/рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд╡рд┐рд░реЛрдз рдореЗрдВред рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рджреЗрдЦреЗрдВред

/* php */
$obj = new stdClass;
$obj->foo = "bar";
$template->render(array('obj, $obj));

/* twig */
{% set prop as "foo" %}
{{ obj.foo }} 
// outputs "bar" 

{{ obj.$prop }} 
// (pseudo-code)
// would compile down to {{ obj.foo }} and output "bar"

jwpage рд╕рд╣реА рд╣реИ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо, рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдЕрдиреНрдп рдЪрд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ PHP рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рдЪрд╛рд╣рд┐рдП:
$obj->{$propName}
рдХреНрдпреЛрдВрдХрд┐ $obj рд╕рд░рд▓ рд╡рд╕реНрддреБ рд╣реИ рдФрд░ рдпрд╣ ArrayAccess рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЯрд╣рдиреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдЯрд╣рдиреА рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдЧреБрдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╣рдиреА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╕реНрдЯреЗрдб stdClass рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ stdClass рдЯрд╛рдЗрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдХреНрдпреЛрдВ рдмрдирд╛рддреЗ рд╣реИрдВ :)

[~] php -r '$class = new stdClass;$class->prop = "hejsa";print_r((array) $class);'      
Array
(
    [prop] => hejsa
)

@henrikbjorn : рд╣рд╛рдБ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рд╕рд╛рдл рд▓рдЧрддрд╛ рд╣реИред

рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕ рдкрд░ рдЙрдмрд▓рддрд╛ рд╣реИ:

function twig_get_filter()
{
    $params = func_get_args();
    $object = array_shift($params);
    $field = implode('', $params);
    return $object->$field;
}

рдФрд░ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

{{ object|get(text, '_', language, '_', type) }}

рдЧрддрд┐рд╢реАрд▓ рдЧреБрдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╣рдиреА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдХреНрдпреЛрдВ? рдореИрдВ рд╕рд┐рдореНрдлрдиреА рдбрд╛рдЯрд╛рдЧреНрд░рд┐рдб рдХреА рддрд░рд╣ рдХреБрдЫ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

{# columns #}
{% for name, column in grid.columns %}
<td>{{ column.render(row[name])|raw }}</td>
{% endfor %}

рдореБрдЭреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдореЗрдВ Twig_Template::getAttribute рд╡рд┐рдзрд┐ рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдврд╝рдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╣ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрд╡рд╛рдВрдЫрд┐рдд):

function twig_array_get_function($array, $name)
{
    return $array[$name];
}

рдЙрдкрдпреЛрдЧ:

row|array_get(name)

рд╣рд╛рдБ, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреЗрдЯрд░реНрд╕ рдЖрджрд┐ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд╡рд┐рдЧ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ)ред

рдЕрдЪреНрдЫреА рдЦрдмрд░! 1.2 рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдм рдЖрдк рдирдП attribute рдлрд╝рдВрдХреНрд╢рди (c609060 рджреЗрдЦреЗрдВ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЪрд░ рдкрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рджреЗрдЦрдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЕрднреА рдЯрд╣рдиреА рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛

{{рдСрдмреНрдЬреЗрдХреНрдЯред{рдкреНрд░реЙрдкрд░реНрдЯреА}}} рдпрд╛ {{рдСрдмреНрдЬреЗрдХреНрдЯред{рд╡рд┐рдзрд┐}(attrs)}}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ {{рд╡рд┐рд╢реЗрд╖рддрд╛ (рд╡рд╕реНрддреБ, рд╡рд┐рдзрд┐, рддрд░реНрдХ)}} рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рд╣реИ

рд╢рд╛рдпрдж рдЖрдк рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЕрднреА рддрдХ рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реВрдВред

@ rspenc29 : рдореИрдВ рдЗрд╕реЗ "рдХреНрд▓реАрдирд░" рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдмрд╛рд░ рд╕реЛрдЪреЗрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, рдпрд╣ рдПрдХ рдЧрдВрдз рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ред

рдПрдПрд╕рдбреА рд╕рдорд░реНрдкрд┐рдд

рддреБрдо рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реЛ
{{ attribute(object, method) }}
{{attribute(obj, foo)}}
http://twig.sensiolabs.org/doc/2.x/functions/attribute.html

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ericmorand picture ericmorand  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

reatang picture reatang  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

su-narthur picture su-narthur  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

maidmaid picture maidmaid  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

koflerdavid picture koflerdavid  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ