Файл Twig.xml не существует

Я следую руководству symfony2 и пытаюсь создать расширение фильтра Twig в главе 5 http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html, однако я не знаю, что у меня готово, но когда я загружаю страницу, я получаю следующую ошибку:

InvalidArgumentException: файл Twig.xml не существует (в: /var/www/tester/symfony/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/../Resources/config).

Есть идеи, почему twig.xml не существует и как я могу его воссоздать?

Я начал с добавления {{ comment.created|created_ago }} в свой файл sidebar.html.twig. Затем я создал папку Twig в / src / tester / TestBundle /, а затем папку Extensions внутри нее. Затем я создал /testerTestBundleExtension.php в «Расширениях» со следующим кодом:

namespace tester\TestBundle\Twig\Extensions;

class testerTestExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            'created_ago' => new \Twig_Filter_Method($this, 'createdAgo'),
        );
    }

    public function createdAgo(\DateTime $dateTime)
    {
        $delta = time() - $dateTime->getTimestamp();
        if ($delta < 0)
            throw new \InvalidArgumentException("createdAgo is unable to handle dates in the future");

        $duration = "";
        if ($delta < 60)
        {
            // Seconds
            $time = $delta;
            $duration = $time . " second" . (($time > 1) ? "s" : "") . " ago";
        }
        else if ($delta <= 3600)
        {
            // Mins
            $time = floor($delta / 60);
            $duration = $time . " minute" . (($time > 1) ? "s" : "") . " ago";
        }
        else if ($delta <= 86400)
        {
            // Hours
            $time = floor($delta / 3600);
            $duration = $time . " hour" . (($time > 1) ? "s" : "") . " ago";
        }
        else
        {
            // Days
            $time = floor($delta / 86400);
            $duration = $time . " day" . (($time > 1) ? "s" : "") . " ago";
        }

        return $duration;
    }

    public function getName()
    {
        return 'tester_test_extension';
    }
}

ОБНОВЛЕНИЕ:

Я удалил каталог vendors и повторно запустил `php composer.phar install ', и теперь я получаю следующую ошибку:

ServiceNotFoundException: служба "веточка" зависит от несуществующей службы "Assetic.twig_extension".

Кроме того, правильно ли мое приложение / autoload.php?

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';

// intl
if (!function_exists('intl_get_error_code')) {
    require_once      __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

ОБНОВЛЕНИЕ:

Мой composer.json ниже:

{
    "name": "symfony/framework-standard-edition",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.1.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.0.*",
        "twig/twig": "1.*",
        "symfony/assetic-bundle": "2.1.*",
        "symfony/swiftmailer-bundle": "2.1.*",
        "symfony/monolog-bundle": "2.1.*",
        "sensio/distribution-bundle": "2.1.*",
        "sensio/framework-extra-bundle": "2.1.*",
        "sensio/generator-bundle": "2.1.*",
        "jms/security-extra-bundle": "1.2.*",
        "jms/di-extra-bundle": "1.1.*",
        "doctrine/data-fixtures": "dev-master",
        "doctrine/doctrine-fixtures-bundle": "dev-master",
        "doctrine/doctrine-migrations-bundle": "dev-master"
    },
    "scripts": {
        "post-install-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "minimum-stability": "dev",
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "symfony-assets-install": "symlink"
    } }

person Derek Carlisle    schedule 26.11.2012    source источник
comment
пожалуйста, разместите код. Может, здесь опечатка или что-то в этом роде.   -  person karolhor    schedule 26.11.2012
comment
Какую версию Sf вы используете? IIRC, этот учебник предназначен для Sf2.0, и в 2.1 был внесен ряд существенных изменений BC.   -  person Maerlyn    schedule 27.11.2012
comment
@taveo - код добавлен в исходный пост.   -  person Derek Carlisle    schedule 27.11.2012
comment
Запустите php composer.phar update и дайте нам свой composer.json   -  person Ziumin    schedule 29.11.2012
comment
Когда я запускаю обновление php composer.phar, я получаю следующее: ветка службы зависит от несуществующей службы Assetic.twig_extension.   -  person Derek Carlisle    schedule 30.11.2012
comment
Я добавил свой файл composer.json в исходный вопрос   -  person Derek Carlisle    schedule 30.11.2012


Ответы (2)


Если вы создаете расширение Twig в symfony, вы помечаете его как службу

Например в tester / TestBundle / Resources / config / services.yml

services:
  test_bundle.twig.tester_test_extension:
    class: tester\TestBundle\Twig\Extensions\testerTestExtension
    tags:
      - { name: twig.extension }

Дополнительную информацию см. В документации http://symfony.com/doc/current/cookbook/templating/twig_extension.html

person karolhor    schedule 27.11.2012
comment
Спасибо. Я пометил это как услугу, используя ваш пример выше, но по-прежнему получаю ошибку. Нужно ли мне переустанавливать расширение twig? - person Derek Carlisle; 27.11.2012
comment
Кроме того, если я попытаюсь очистить кеш, я получаю сообщение об ошибке - [InvalidArgumentException] Файл Twig.xml не существует (в: / var / www / tester / symfony / vendor / symfony / symfony / src / Symfony / Bundle / TwigBundle /DependencyInjection/../Resources/config). - person Derek Carlisle; 27.11.2012

Ваш composer.json кажется неверным. Скорее, чем

"twig/twig": "1.*",

эта строка должна быть:

"twig/extensions": "1.0.*",
person gview    schedule 01.12.2012