我有两个树枝延伸和一根树枝。我需要在一根树枝上使用树枝延伸部分的功能。有什么方法可以区分调用函数的扩展名。
现在,我正在使用这种方法driverId|getDriverNameFromId
它给了我错误!
以下是驱动程序扩展的代码:
<?php
namespace abc\CoreBundle\Extension;
use Doctrine\Common\Persistence\ManagerRegistry;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use abc\CoreBundle\Entity\CostAllocation;
use abc\CoreBundle\Entity\Driver;
class DriverExtension extends \Twig_Extension {
protected $mr;
protected $container;
public function __construct(ManagerRegistry $mr, Container $container)
{
$this->mr = $mr;
$this->container = $container;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('getDriverNameFromId', array($this, 'getDriverNameFromId')),
);
}
public function getName()
{
return 'driver_extension';
}
/**
* get updated columns
*
* @param Integer $driverImportId
*
* return array
*/
public function getDriverNameFromId($driverImportId)
{
return $this->container->get('core_process_import')->getName($driverImportId, 'DriverImport');
}
}
同样我有一个核心扩展。
在我的树枝上,当我打电话
{% if driverImport.id|getDriverNameFromId|length > 0 %}
{% endif %}
它给了我错误
Unknown "getDriverNameFromId" filter in CoreBundle:DriverImport:list.html.twig at line 88?
以下是services.yml的代码
_core.services.invoice.extension.class: abc\CoreBundle\Extension\InvoiceExtension
_core.services.driver.extension.class: abc\CoreBundle\Extension\DriverExtension
invoice.twig.extension:
class: %_core.services.invoice.extension.class%
arguments: [@doctrine, @service_container]
tags:
- { name: twig.extension }
driver.twig.extension:
class: %_core.services.driver.extension.class%
arguments: [@doctrine, @service_container]
tags:
- { name: twig.extension }
答案 0 :(得分:1)
首先获得正确的命名空间(根据最佳实践建议);对于任何Twig扩展类,它应该是名称空间Smartshore\CoreBundle\Twig
。
确保您已在services.yml中正确声明了类 E.g。
driver_extension.twig.extension:
class: Smartshore\CoreBundle\Twig\DriverExtension
arguments: ["@my.injected.services"]
tags:
- { name: twig.extension }
myotherclass.twig.extension:
class: Smartshore\CoreBundle\Twig\MyOtherTwigExtension
arguments: ["@security.context", '@kernel', '@router']
tags:
- { name: twig.extension }
答案 1 :(得分:1)
我已经在我的项目中测试了你的代码,它运行正常,所以它是另一回事。
我认为您的服务配置未导入。
如果您将其添加到捆绑包 services.yml
文件中(不是app/config/services.yml
中的主要文件),请确保您已在config.yml
中导入此文件文件。
假设您的服务配置在
中src/CoreBundle/Resources/config/services.yml
确保您已在app/config/config.yml
文件的开头导入它:
imports:
- { resource: parameters.yml } // |
- { resource: security.yml } // |=> default ones
- { resource: services.yml } // |
- { resource: "@CoreBundle/Resources/config/services.yml" } //new one