Переключение псевдонима инжектора с Mustache_Engine на Twig - PullRequest
0 голосов
/ 15 февраля 2020

В настоящее время я использую учебник, чтобы научиться делать php проект без фреймворка , чтобы я мог немного лучше понять фреймворки. Я работал над этим, и я застрял в точке, где я собираюсь переключить инжектор с Mustache_Engine на Twig

/**
 * Mustache Renderer
 */
/*$injector->alias('Todo\Template\Renderer', 'Todo\Template\MustacheRenderer');
$injector->define('Mustache_Engine', [
    ':options' => [
        'loader' => new Mustache_Loader_FilesystemLoader(dirname(__DIR__) . '/templates', [
            'extension' => '.html',
        ]),
    ],
]);*/

/**
 * Twig Environment
 */
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('Twig_Environment', function () use ($injector) {
    $loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
    return new Twig_Environment($loader);
});

Но все, что я получаю, это следующая ошибка

LogicException

Вы должны сначала установить загрузчик.

Я понятия не имею, как go исправить это, но у меня такое ощущение, что я делаю что-то здесь не так, потому что многие Люди прошли этот урок.

РЕДАКТИРОВАТЬ, добавив скриншот для ясности

screenshot of the error that I am getting

1 Ответ

1 голос
/ 03 марта 2020

Вы можете исправить эту ошибку двумя различными способами.

Первый способ, просто замените Twig_Environment на \Twig\Environment, вот полный пример кода:

/**
 * Twig Environment
 */
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('\Twig\Environment', function () use ($injector) {
    $loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
    return new Twig_Environment($loader);
});

Второй способ , добавьте псевдоним $injector->alias(\Twig\Environment::class, 'Twig_Environment');, здесь полный пример кода:

/**
 * Twig Environment
 */
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('Twig_Environment', function () use ($injector) {
    $loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
    return new Twig_Environment($loader);
});
$injector->alias(\Twig\Environment::class, 'Twig_Environment');

Дополнительную информацию об этой ошибке вы можете найти здесь: https://github.com/twigphp/Twig/issues/2907

В двух словах о ошибка: начиная с версии 1.38.0 пакет Twig использует классы пространства имен в качестве классов по умолчанию (PSR-0 являются псевдонимами). Более подробную информацию вы можете найти здесь https://github.com/twigphp/Twig/pull/2862, а также в журнале изменений https://github.com/twigphp/Twig/blob/3.x/CHANGELOG#L447

...