如何解决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 举报,一经查实,本站将立刻删除。