Как заставить Smarty3 работать с Symfony2? - PullRequest
2 голосов
/ 04 февраля 2012

Я пытаюсь заставить Smarty 3 работать как движок шаблонов для Symfony 2. Я пытаюсь установить этот пакет, чтобы заставить smarty 3 работать:

https://github.com/noiselabs/SmartyBundle

Он отлично устанавливается, но когда я добавляю его в AppKernal, как сказано в инструкции по установке, я получаю следующую ошибку:

Неустранимая ошибка: класс 'NoiseLabs \ Bundle \ SmartyBundle' не найден в> /home/kevin/workspace/Symfony/app/AppKernel.php в строке 20

где строка 20 находится внутри registerBundles (): новые NoiseLabs \ Bundle \ SmartyBundle (),

Вторая, возможно, связанная проблема, с которой я столкнулся, заключается в том, что в app / config / config.yml, если я добавлю 'smarty' в массив шаблонизатора:

templating:      { engines: ['twig'] }

выдает эту ошибку:

ServiceNotFoundException: служба "templating" зависит от несуществующей> службы "templating.engine.smarty".

Я понимаю, что веточка поставляется с Symfony, но для этого проекта мне нужно использовать smarty. Я что-то упустил или есть другое решение для этого?

Вот код ядра:

<?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {   
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
//new NoiseLabs\Bundle\SmartyBundle(),
            new Blog\EntryBundle\BlogEntryBundle(),
        );  

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }   

        return $bundles;
    }   

    public function registerContainerConfiguration(LoaderInterface $loader)
    {   
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }   
}

Вот код автозагрузчика:

<?php

use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'NoiseLabs'        => __DIR__.'/../vendor/bundles',
    'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
));
$loader->registerPrefixes(array(
    'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib',
    'Twig_'            => __DIR__.'/../vendor/twig/lib',
));

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

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

$loader->registerNamespaceFallbacks(array(
    __DIR__.'/../src',
));
$loader->register();

AnnotationRegistry::registerLoader(function($class) use ($loader) {
    $loader->loadClass($class);

// Swiftmailer needs a special autoloader to allow
// the lazy loading of the init file (which is expensive)
require_once __DIR__.'/../vendor/swiftmailer/lib/classes/Swift.php';
Swift::registerAutoload(__DIR__.'/../vendor/swiftmailer/lib/swift_init.php');

Ответы [ 2 ]

6 голосов
/ 04 февраля 2012

Спасибо за использование SmartyBundle (я создатель).

Черт, документация неверна. Пожалуйста, замените строку:

new \NoiseLabs\Bundle\SmartyBundle(),

от

new \NoiseLabs\Bundle\SmartyBundle\SmartyBundle(),
1 голос
/ 20 мая 2012

У меня были проблемы с руководством, но я решил его. Используйте следующие шаги:

  1. Загрузите Smarty и распакуйте его в свой каталог htdocs. В результате вы получите файл с таким именем: htdocs / Smarty / libs / Smarty.class.php

  2. Загрузите пакет Smarty Bundle для Symfony 2 на Github , загрузив его с помощью ZIP-кнопки. Создайте следующую иерархию папок: htdocs / yourSymfonyFolder / src / NoiseLabs / Bundle / SmartyBundle и разархивируйте загруженный ZIP-файл с помощью Smarty.php, SmartyBundle.php, SmartyEngine.php и всех других файлов в htdocs / Symfise / Buxle / ssc / SmartyBundle.

  3. Перейдите к php.ini вашего веб-сервера, например c: /xampp/php/php.ini, в поиске строки:

    include_path = ".;c:\php\includes;"
    

    и добавление c: \ yourHtdocsFolder \ Smarty \ libs \ с полным результатом:

    include_path = ".;c:\php\includes;c:\yourHtdocsFolder\Smarty\libs\"
    
  4. Откройте файл htdocs / yourSymfonyFolder / app / AppKernel.php и добавьте:

    $bundles = array(
        [...]
        new NoiseLabs\Bundle\SmartyBundle\SmartyBundle(),
        [...]
    );
    
  5. Вот и все! Используйте следующий пример в вашем контроллере src / Acme / HelloBundle / Controller / DefaultController.php:

    public function indexAction($name)
    {
        return $this->render('AcmeHelloBundle:Default:index.html.tpl', array('name' => $name);
    }
    
  6. Создайте шаблон в вашем пути src / Acme / HelloBundle / Resources / views / Default / index.html.tpl:

    Hello {$name}
    
  7. позвоните по адресу www.yourWebsite / app_dev.php / hello / yourName. Обратите внимание, что вы должны зарегистрировать URL в своем файле маршрутизации.

...