我需要在自定义twig扩展中使用productRepository方法。我可以使用像'findOneBy'这样的标准方法但是如果我在productRepository中定义一个自定义方法(比如returnVariants())那么我会收到这个错误:
在SyliusWebBundle:Frontend / Homepage:main.html.twig第16行渲染模板期间抛出异常(“未定义方法'returnVariants'。方法名称必须以findBy或findOneBy!”开头。)
自定义树枝扩展的代码:
namespace Sylius\Bundle\WebBundle\Twig;
use Symfony\Bridge\Doctrine\RegistryInterface;
class ProductExtension extends \Twig_Extension
{
public function __construct(RegistryInterface $doctrine)
{
$this->doctrine = $doctrine;
}
public function getFunctions()
{
return array(
'product_func' => new \Twig_Function_Method($this, 'productFunc'),
);
}
public function productFunc($id)
{
/* This works */
$product = $this->doctrine->getRepository('SyliusCoreBundle:Product')
->findOneBy(array('id' => $id));
/* This doesn't */
$product = $this->doctrine->getRepository('SyliusCoreBundle:Product')->returnVariants();
return $product->getPrice();
}
非常感谢你的帮助!
答案 0 :(得分:0)
确保您的实体使用自定义存储库
/**
* @ORM\Entity(repositoryClass="Sylius\...\ProductRepository")
**/
class Product { ... }
还尝试清除缓存
我建议不要制作自定义树枝功能。 在控制器中调用此函数并将结果传递给twig