Pimcore:如何在PHP非控制器类中判断是否处于编辑模式/后台区域
在PHP监听器类中判断后台编辑页面状态的方法
方法1:通过Request对象读取编辑状态
多数支持后台编辑的PHP框架(比如Pimcore、基于Symfony的CMS)会把editmode标记存在请求属性里,你可以通过注入RequestStack来获取当前请求并判断:
注入RequestStack到监听器
在监听器的构造函数里注入Symfony\Component\HttpFoundation\RequestStack,用来获取当前请求:use Symfony\Component\HttpFoundation\RequestStack; class YourCustomListener { private $requestStack; public function __construct(RequestStack $requestStack) { $this->requestStack = $requestStack; } }判断编辑模式状态
在监听器的事件处理方法中,先拿到当前请求,再读取editmode属性:public function handleEvent($event) { $currentRequest = $this->requestStack->getCurrentRequest(); // 先判断请求是否存在(避免CLI等无请求场景报错) if ($currentRequest && $currentRequest->attributes->get('editmode')) { // 当前处于后台编辑页面,执行你的逻辑 } }
方法2:用框架自带的编辑模式工具类(以Pimcore为例)
如果是Pimcore这类自带完整编辑模式的系统,直接注入官方提供的EditModeHelper就能快速判断:
use Pimcore\Bundle\CoreBundle\Helper\EditModeHelper; class YourCustomListener { private $editModeHelper; public function __construct(EditModeHelper $editModeHelper) { $this->editModeHelper = $editModeHelper; } public function handleEvent($event) { if ($this->editModeHelper->isEditMode()) { // 处于后台编辑页面 } } }
关键配置提示
别忘了在框架的服务配置里(比如Symfony的services.yaml),给监听器正确注入依赖:
services: App\EventListener\YourCustomListener: arguments: $requestStack: '@Symfony\Component\HttpFoundation\RequestStack' # 如果用EditModeHelper就换成 $editModeHelper: '@Pimcore\Bundle\CoreBundle\Helper\EditModeHelper' tags: - { name: kernel.event_listener, event: your.target.event, method: handleEvent }
内容的提问来源于stack exchange,提问作者gvanto
相关产品推荐
相关产品推荐

