user852610
user852610

Reputation: 2265

In Twig, check if a specific key of an array exists

In PHP we can check if a key exists in an array by using the function array_key_exists().

In the Twig templating language we can check if an variable or an object's property exists simply by using an if statement, like this:

{% if app.user %}
do something here
{% else %}
do something else
{% endif %}

But how do we check if a key of an array exists using Twig? I tried {% if array.key %}, but it gives me an error:

Key "key" for array with keys "0, 1, 2, 3...648" does not exist

As one of the primary ways of passing data into a template is using arrays, it seems like there should be some way of doing this. Any thoughts?

Upvotes: 110

Views: 162740

Answers (4)

zoore
zoore

Reputation: 330

SYMFONY 6

solution is quite simple TWIG is looking for variable passed when $this->render is called in Controller.

  1. create your pack data like

                 $options = [
                     'companyLogo' => $company->getCompanyLogoLink(),
                     'companyName' => $company->getCompanyShortname(),
                     'menuItem'    => $companyMenuCategories,
    
             ];
    
  2. pass it to TWIG

    return $this->render('folder/template.html.twig', [ 'o' => $options, ]);

  3. in twig just look for 'passed' key ( o ) and array data with it

       {% if o.companyName is defined %}
         {{ o.companyName }}
       {% endif %}
    

Upvotes: 2

dreftymac
dreftymac

Reputation: 32360

Quick Answer (TL;DR)

  • DeveloperTLindel wants to test for existence of array key in Twig.
  • DeveloperTLindel wants to trap any errors associated with undefined key.
  • This can be handled using the default filter.

Detailed Answer

Context

  • Twig 2.x (latest version as of Wed 2017-03-08)
  • General-purpose use of the default filter.

Problem

  • Scenario:
  • DeveloperTLindel wants to test for existence of array key in Twig.
  • DeveloperTLindel wants to avoid any errors or exceptions caused by potentially undefined key.

Solution

  • DeveloperTLindel can use the default filter.
  • The default filter catches any exceptions owing to undefined variable, and allows short-circuit substition of an alternate value.
  • The default filter is chainable.

Example01


{#- ****************************************
  testing for a single key in associative array
  -#} 
  {%- set mystring = myarray['key-no-existo'] |default('__BLANK__')  -%}

{#- ****************************************
  testing for a multiple keys in associative array
  -#} 
  {%- set mystring = myarray['alpha']
        |default(myarray['bravo'])
        |default(myarray['charlie'])
        |default('__BLANK__')
        -%}

See also

Upvotes: 4

Samir Patel
Samir Patel

Reputation: 895

You can use the keys twig function

{% if myVar in someOtherArray|keys %}

Upvotes: 47

phpisuber01
phpisuber01

Reputation: 7715

Twig example:

{% if array.key is defined %}
  // do something
{% else %}
  // do something else
{% endif %}

Upvotes: 250

Related Questions