我想使用依赖注入将Plates实例传递给带有 PHP-DI 的控制器,该控制器与我的路由系统Simple Router集成。我试图注入一个 Plates 实例,但出现此错误:
<?php
namespace Controllers;
use \League\Plates\Engine;
use \League\Plates\Template\Template;
use \League\Plates\Extension\Asset;
class Controller {
public function __construct(\League\Plates\Engine $templates)
{
$this->templates = $templates;
}
?>
未捕获的 LogicException:模板名称“home”无效。尚未定义默认目录
我该如何解决这个问题?我还需要使用 asset() 方法传递资产路径。任何帮助将不胜感激。
更新
感谢 jcHache 的帮助,我用这个 DI 代码在我的基本控制器中管理了一个 Plates 实例的注入:
<?php
// config.php
return [
League\Plates\Engine::class => DI\create()
->constructor(TEMPLATE_ROOT)
->method('loadExtension', DI\get('League\Plates\Extension\Asset')),
League\Plates\Extension\Asset::class => DI\create()
->constructor(APP_ROOT),
];
index.php 文件
<?php
use Pecee\SimpleRouter\SimpleRouter;
use DI\ContainerBuilder;
$container = (new \DI\ContainerBuilder())
->useAutowiring(true)
->addDefinitions('config.php')
->build();
SimpleRouter::enableDependencyInjection($container);
这很好,但我面临一个问题,我找不到解决办法。我得到这个与板块资产加载器相关的错误,它似乎被实例化了不止一次。我已经用我的基本控制器扩展了我的控制器,在其中实例化了资产加载器,但我认为这不是问题吗?有解决办法吗?
未捕获的 Pecee\SimpleRouter\Exceptions\NotFoundHttpException:模板函数名称“资产”已注册
万千封印