Php Symfony 4,检查模板是否已加载?

Php Symfony 4,检查模板是否已加载?,php,symfony,Php,Symfony,我加载了一个模板home.html.twig和一个ajax请求,如下代码所示。那很好用 但是如果我用路径mywebsite.com/search/foo加载我的网站,那么我只有searchListing.html.twig显示,而没有加载任何home.html.twig,因此网站被破坏 那么,在返回之前,控制器中是否有办法检查我的模板home.html.twig是否已加载,如果未加载,是否将其插入块中并插入searchListing.html.twig 我的html: 以下是我的ajax: $

我加载了一个模板
home.html.twig
和一个ajax请求,如下代码所示。那很好用

但是如果我用路径
mywebsite.com/search/foo
加载我的网站,那么我只有
searchListing.html.twig
显示,而没有加载任何
home.html.twig
,因此网站被破坏

那么,在返回之前,控制器中是否有办法检查我的模板
home.html.twig
是否已加载,如果未加载,是否将其插入块中并插入
searchListing.html.twig

我的html:

  • 以下是我的ajax:

    $(document).ready(function() {
    
      $('.trigger').on('click', function(e) {
    
          e.preventDefault();
          const $link = $(e.currentTarget);
    
          $.ajax({
            url: $link.attr('href'),
            type: 'get'
          })
          .done(function (data) {
            $('#main-content').html(data)
          })
      });
    
    });
    
    我的控制器:

    class Search extends AbstractController {
    
      /**
      * @Route("/search/{var}", name="search")
      */
    
      public function search ($var) {
    
        // CHECK HERE
        // if home.html.twig is loaded > load searchListing.html.twig inside a given block
        // if home.html.twig is not loaded > load home.html.twig then load searchListing.html.twig inside a given block
    
        return $this->render('searchListing.html.twig',[
          'var' => $var,
        ]);
    
      }
    
    }
    

    如果我理解正确,您需要:

    /**
     * @Route("/search/{var}", name="search")
     */
    public function search (Request $request, $var) {
    
        // render only search results for ajax request
        if ($request->isXmlHttpRequest()) {
            return $this->render('searchListing.html.twig',[
                'var' => $var,
            ]);
        }
    
        return $this->render('home.html.twig',[
            'var' => $var,
        ]);
    
    }
    

    您可以检查($request->isXmlHttpRequest())是否为ajax请求并加载home\u page.html.twig。但是,只有当客户端发送带有:XMLHttpRequest头的
    X\u REQUESTED\u时,这才有效。使用jQuery开箱即用,不使用Angular开箱即用。更好的方法是发送一个额外的标志,如
    withoutloyout=1
    ,然后在控制器中返回部分响应。这不需要魔法,结果更为详细和干净。但只有当客户端发送带有:XMLHttpRequest
    头的
    X\u REQUESTED\u时,这才有效。使用jQuery开箱即用,不使用Angular开箱即用。更好的方法是发送一个额外的标志,如
    withoutloyout=1
    ,然后在控制器中返回部分响应。没有魔法,结果更为详细和干净。它可以工作,但这是相反的方式,而不是检查模板是否已加载,检查这是否是一个Ajax请求,然后加载一个模板或另一个模板。您的意思是:
    检查模板是否已加载
    ?@KamilAdryjanek我的意思是检查是否实际显示了
    home.html.twig
    。如果它只是加载
    列表
    ;如果未加载
    home
    ,则在home块中加载
    listing
    如何将
    searchListing.html.twig
    包含在
    home.html.twig
    中?