大家好,我来找您是因为我的ajax脚本有一个小问题,我分享了我的代码,并告诉我是否存在问题,感谢您的进步,如果您有任何解决方案,我感谢您,这是一个错误:
Argument 1 passed to App \ Repository \ ProductRepository :: findBySearch () must be of the string type, object given, called in C: \ wamp64 \ www \ Shop \ src \ Controller \ FrontController.php on line 201
我的控制器:
/**
* @Route("/recherche/", name="search", methods="POST")
* @param Request $request
* @return Response
*/
public function search(Request $request): Response{
$search = $this->createForm(SearchType::class);
$search->handleRequest($request);
if($request->isXmlHttpRequest()) {
$value = $search['name'];
$result = $this->getDoctrine()->getRepository(Product::class)->findBySearch($value);
return new JsonResponse($result);
}
return $this->render('inc/search.html.twig', [
'title' => 'Effectuer une recherche',
'search' => $search->createView()
]);
}
我的执行SQL查询的存储库:
/**
* @param $value
* @return string
* @throws \Exception
*/
public function findBySearch(string $value) {
$bool = 1;
$query = $this->createQueryBuilder('r')
->select('r')
->orwhere('r.name LIKE :chaine')
->orWhere('r.description LIKE :chaine')
->andWhere('r.isPublished = :bool')
->orderBy('r.createdAt', 'DESC')
->setParameter(':chaine', '%'.$value.'%')
->setParameter(':bool', $bool)
->getQuery();
try {
return $query->getResult();
}
catch (\Exception $e) {
throw new \Exception('Problème' . $e->getMessage());
}
}
这是我的代码,允许我提出Ajax请求
<!-- Modal Search -->
<div class="modal-search-header flex-c-m trans-04 js-hide-modal-search">
<div class="container-search-header">
<button class="flex-c-m btn-hide-modal-search trans-04 js-hide-modal-search">
<img src="images/icons/icon-close2.png" alt="CLOSE">
</button>
<div id="resultat"></div>
{{ form_start(search, {'method': 'POST', 'attr': {'class': 'wrap-search-header flex-w p-l-15', 'id': 'form'}}) }}
<button class="flex-c-m trans-04">
<i class="zmdi zmdi-search"></i>
</button>
{{ form_widget(search.name) }}
{{ form_end(search) }}
</div>
</div>
<script>
$(document).ready(function(){
$("#form").keypress(function(){
$.ajax({
type:"POST",
data: $(this).serialize(),
url:"{{ path('search') }}",
success: function(data){
$("#search_name").html(data);
$.post( "{{ path('search') }}", function( data ) {
$( "#resultat" ).html( data );
});
},
error: function(){
$("#search_name").html('Une erreur est survenue.');
}
});
return false;
});
});
</script>
答案 0 :(得分:3)
替换
$value = $search['name'];
与
$value = $search->get('name')->getNormData();
由于$search
是FormInterface
对象,因此仅通过$search['name']
就不会获得提交的值。您可以调用$search->getData()
来获取整个表单数据,或者调用$search->get('YOUR_FIELD_NAME')->getNormData()
来获取特定值
另外,考虑用
包装if($search->isSubmitted()) {
if($request->isXmlHttpRequest()) {
// ...
}
}