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

时间:2018-08-09 11:50:08

标签: php symfony

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

但是,如果我使用路由mywebsite.com/search/foo加载我的网站,那么我只会显示searchListing.html.twig而未加载任何home.html.twig,因此该网站已损坏

那么在返回之前,控制器中是否有一种方法可以检查我的模板home.html.twig是否已加载,如果没有加载,然后将searchListing.html.twig插入一个块中?

我的html:

<li><a href="{{ path('search', {var: 'foo'}) }}" class="trigger">foo</a></li>

这是我的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,
    ]);

  }

}

1 个答案:

答案 0 :(得分:0)

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

/**
 * @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,
    ]);

}