我已加载模板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,
]);
}
}
答案 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,
]);
}