Sylius:使用自定义Twig模板中的Product Repository

时间:2013-07-03 14:53:48

标签: symfony doctrine-orm twig sylius

我需要在自定义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();
    }

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

确保您的实体使用自定义存储库

/** 
* @ORM\Entity(repositoryClass="Sylius\...\ProductRepository") 
**/
class Product { ... }

还尝试清除缓存

我建议不要制作自定义树枝功能。 在控制器中调用此函数并将结果传递给twig

相关问题