为啥 EventSubscriberInterface 不起作用如果我想获得一个 html 页面

Posted

技术标签:

【中文标题】为啥 EventSubscriberInterface 不起作用如果我想获得一个 html 页面【英文标题】:Why EventSubscriberInterface don't work If I want to get a html page为什么 EventSubscriberInterface 不起作用如果我想获得一个 html 页面 【发布时间】:2021-12-16 02:57:17 【问题描述】:

我在我的项目中添加了一个 EventSubscriberInterface 来重定向用户无权访问并且用户未登录,他们无权访问某些页面和 url,我的代码工作但我的 EventSubscriberInterface 不起作用如果我想要获取页面 html,即使我在 _construct 中添加 die() 也没有发生任何事情

页面html示例

/public/modules/story.html

我的代码

public function onKernelRequest(RequestEvent $event)
    
       $request = $event->getRequest();
       $RequestUri = strtok($request->getRequestUri(), '?');
        if (strpos($RequestUri, '/public/modules') !== false) 
            
            if(empty($_SESSION['_sf2_attributes']['_security.last_username']))
                //return new RedirectResponse($this->urlGenerator->generate('app_login'));
                $route =$this->urlGenerator->generate('app_login');
                $event->setResponse(new RedirectResponse($route));
            else
            $connection = $this->_em->getConnection();
            $statement = $connection->prepare("SELECT * FROM eurotest_users eu 
                LEFT JOIN user_range ur On eu.id = ur.user_id 
                LEFT JOIN user_version uv On eu.id = uv.user_id 
                LEFT JOIN eurotest_module em On ur.range_id = em.module_range_id AND uv.version_id = em.module_version_id
                where eu.email ='".$_SESSION['_sf2_attributes']['_security.last_username']."' and em.folder='".$RequestUri."' ");
                $statement->execute();
                $statement->fetchAll();
                $counter = $statement->rowCount();
                if($counter == 0)
                    $route =$this->urlGenerator->generate('app_home');
                    $event->setResponse(new RedirectResponse($route));
                
               
        
    

【问题讨论】:

【参考方案1】:

如果您尝试直接访问 HTML 文件,Symfony 进程将被绕过。

您可以尝试将此 HTML 页面呈现为通过路由器的视图,例如 this documentation

这将触发所有 Symfony 的事件

【讨论】:

HTML 页面不是静态的 您的页面上有分析工具栏吗? 不,我没有 “HTML 页面不是静态的”——这是什么意思?通常,这是任何 php 脚本的主要区别 我有很多html页面(当我上传一个新模块时可以有一个或多个html页面)

以上是关于为啥 EventSubscriberInterface 不起作用如果我想获得一个 html 页面的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?