微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sylius 产品索引获取实际分类单元

如何解决Sylius 产品索引获取实际分类单元

我需要在前面的树枝中获取产品列表中的实际分类单元(路线 sylius_shop_product_index

我只发现这种技术可以做到这一点

{% set taxon = products.deFinition.driverConfiguration.repository.arguments.taxon %}

但我认为是正确的

你还有别的方法吗?

我在 sylius 1.8.11

Symfony 4.4.21

PHP 7.4.8

解决方法

我遇到了与您完全相同的问题,最后我认为您的建议是唯一“正确”的方法,因为这是资源包使用的真正分类单元。当然,这是一个弱约束,因为有人可以在不知道其含义的情况下更改查询。

所以,对我来说最好的解决方案:

{% set taxon = products.definition.driverConfiguration.repository.arguments.taxon %}

这里的真正限制是资源包不允许定义视图参数,或者,IMO 更好的是,默认情况下自动将存储库参数公开为 Twig 上下文。

我发现的唯一替代方法是定义一个名为 SlugExtension 的 TwigExtension,它定义了一个方法 findTaxonBySlug;有了这个,您可以使用当前上下文检索正确的分类单元,即 Channel、Locale 和 Slug。但现在就浪费时间。

,

提到的替代@giosh94mhz 将如下所示:

树枝扩展

namespace App\Twig;

use Sylius\Component\Taxonomy\Repository\TaxonRepositoryInterface;
use Sylius\Component\Taxonomy\Model\TaxonInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

final class TaxonExtension extends AbstractExtension
{
    private TaxonRepositoryInterface $taxonRepository;

    public function __construct(TaxonRepositoryInterface $taxonRepository)
    {
        $this->taxonRepository = $taxonRepository;
    }

    public function getFunctions(): array
    {
        return [
            new TwigFunction('get_taxon_by_slug',[$this,'getTaxonBySlug']),];
    }

    public function getTaxonBySlug(string $slug,string $locale): ?TaxonInterface
    {
        return $this->taxonRepository->findOneBySlug($slug,$locale);
    }
}

树枝模板

{% set taxon = get_taxon_by_slug(app.request.attributes.get('slug'),sylius.localeCode) %}

IMO 不值得,除非您可以将其用于其他目的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。