Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. EmbedTokenParser.php

function EmbedTokenParser::parse

Overrides IncludeTokenParser::parse

File

vendor/twig/twig/src/TokenParser/EmbedTokenParser.php, line 27

Class

EmbedTokenParser
Embeds a template.

Namespace

Twig\TokenParser

Code

public function parse(Token $token) : Node {
    $stream = $this->parser
        ->getStream();
    $parent = $this->parser
        ->getExpressionParser()
        ->parseExpression();
    [
        $variables,
        $only,
        $ignoreMissing,
    ] = $this->parseArguments();
    $parentToken = $fakeParentToken = new Token(Token::STRING_TYPE, '__parent__', $token->getLine());
    if ($parent instanceof ConstantExpression) {
        $parentToken = new Token(Token::STRING_TYPE, $parent->getAttribute('value'), $token->getLine());
    }
    elseif ($parent instanceof NameExpression) {
        $parentToken = new Token(Token::NAME_TYPE, $parent->getAttribute('name'), $token->getLine());
    }
    // inject a fake parent to make the parent() function work
    $stream->injectTokens([
        new Token(Token::BLOCK_START_TYPE, '', $token->getLine()),
        new Token(Token::NAME_TYPE, 'extends', $token->getLine()),
        $parentToken,
        new Token(Token::BLOCK_END_TYPE, '', $token->getLine()),
    ]);
    $module = $this->parser
        ->parse($stream, [
        $this,
        'decideBlockEnd',
    ], true);
    // override the parent with the correct one
    if ($fakeParentToken === $parentToken) {
        $module->setNode('parent', $parent);
    }
    $this->parser
        ->embedTemplate($module);
    $stream->expect(Token::BLOCK_END_TYPE);
    return new EmbedNode($module->getTemplateName(), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine());
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal