2015-03-27 3 views
-1

Я прочитал Silex Cookbook по управлению активами в шаблонах http://silex.sensiolabs.org/doc/cookbook/assets.htmlрасширить Twig определить URL-адрес АКТИВЫ

и написать этот код в моем app/app.php:

$app['twig'] = $app->share($app->extend('twig', function ($twig, $app) { 
    $twig->addFunction(new \Twig_SimpleFunction('asset', function ($asset) { 
     // implement whatever logic you need to determine the asset path 
     return sprintf('http://assets.examples.com/%s', ltrim($asset, '/')); 
    })); 

    return $twig; 
})); 

$app->get('/', function() use ($app) { 
    return $app['twig']->render('index.twig', array(
     'title' => "Hello World", 
     'colors' => array("red", "green", "yellow"), 
    )); 
}); 

и index.twig содержат:

{% extends "layout.twig" %} 

{% block title %} 
    {{ title }} 
{% endblock %} 

{% block content %} 
    <h1>{{ title }}</h1> 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi quibusdam numquam laudantium eum asperiores non libero odio quae debitis beatae perferendis eius esse molestiae voluptatum vel inventore quasi. Quo sint sequi sunt amet sapiente tempora autem iusto praesentium rerum ducimus.</p> 

    <ul> 
     {% for color in colors %} 
      <li>{{ color }}</li>   
     {% endfor %} 
    </ul> 

    {{ asset('/css/styles.css') }} 

{% endblock %} 

Все в порядке, но когда я использую asset в другом twig файлах, я wi LL получить эту ошибку:

Twig_Error_Syntax in Parser.php line 370: 
A template that extends another one cannot have a body in "admin/dashboard.twig" at line 3. 

, например, мой AdminDashboard контроллер содержит:

<?php 


namespace App\Controller\Admin; 

use Silex\Application; 

class AdminDashboard 
{ 

    function __construct() 
    { 
     return "Dashboard"; 

    } 

    function indexAction(Application $app) 
    { 
     return $app['twig']->render('admin/dashboard.twig', array(
      'title' => "Hello World", 
      'colors' => array("red", "green", "yellow"), 
     )); 
    } 


} 

и admin/dashboard.twig содержат:

{% extends "layout.twig" %} 

{{ asset('/css/styles.css') }} 

Но когда я посещаю свою admin страницу я получаю выше ошибки.

ответ

0

Просто прочитал сообщение об ошибке, это не о вызове функции:

A template that extends another one cannot have a body

Файл admin/dashboard.twig имеет {% extends ... %} на первой линии, что означает, что он расширяет другой шаблон. Как вы видите в сообщении об ошибке, шаблон, который расширяет другой шаблон, не может иметь тело. Он может заполнять только блоки, определенные родительским шаблоном.

+0

Спасибо за подсказку, к сожалению, я новичок в силексе, и я думаю, что эта ошибка может быть возвращена к веточке, извините, извините – MajAfy

Смежные вопросы