如何在Twig中使用constant()方法同时获取多个常量值?
解决Twig中批量获取PHP类常量的问题
可行方案
方案1:在Twig中直接构建常量数组
对每个常量单独调用constant()函数,组合成目标数组:
{% set targetStatuses = [ constant('\\Uello\\Service\\StateMachine\\Loader\\ServiceOrderItemProcess::STATUS_PICKED_UP'), constant('\\Uello\\Service\\StateMachine\\Loader\\ServiceOrderItemProcess::STATUS_DELIVERED'), constant('\\Uello\\Service\\StateMachine\\Loader\\ServiceOrderItemProcess::STATUS_RETURNED') ] %} {# 后续可直接用数组做判断,比如检查config.to是否在目标状态集合中 #} {% if config.to in targetStatuses %} {# 执行对应业务逻辑 #} {% endif %}
方案2:PHP端提前组装数组传递给Twig
在PHP层(控制器/服务类)先整理好常量数组,再传递给模板,让Twig代码更简洁:
use Uello\Service\StateMachine\Loader\ServiceOrderItemProcess; // 组装目标状态数组 $targetStatuses = [ ServiceOrderItemProcess::STATUS_PICKED_UP, ServiceOrderItemProcess::STATUS_DELIVERED, ServiceOrderItemProcess::STATUS_RETURNED, ]; // 传递到Twig模板 return $this->render('your_template.html.twig', [ 'targetStatuses' => $targetStatuses, ]);
在Twig中直接使用预定义数组:
{% if config.to in targetStatuses %} {# 执行对应业务逻辑 #} {% endif %}
方案3:自定义Twig函数(适合多模板复用场景)
如果该状态数组需要在多个模板中使用,可自定义Twig函数统一返回:
// 自定义Twig扩展类 use Twig\Extension\AbstractExtension; use Twig\TwigFunction; use Uello\Service\StateMachine\Loader\ServiceOrderItemProcess; class ServiceOrderExtension extends AbstractExtension { public function getFunctions() { return [ new TwigFunction('get_service_order_target_statuses', function() { return [ ServiceOrderItemProcess::STATUS_PICKED_UP, ServiceOrderItemProcess::STATUS_DELIVERED, ServiceOrderItemProcess::STATUS_RETURNED, ]; }), ]; } }
注册扩展后,在Twig中调用:
{% set targetStatuses = get_service_order_target_statuses() %} {% if config.to in targetStatuses %} {# 执行对应业务逻辑 #} {% endif %}
内容的提问来源于stack exchange,提问作者Shirley Oliveira
相关产品推荐
相关产品推荐

