我想使用依赖注入通过PHP-DI 将Plates的实例传递给我的控制器,该控制器与我的路由系统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:模板函数名称“asset”已注册