javascript - Symfony Ajax 请求错误 500
问题描述
大家好我来找你是因为我的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>
解决方案
代替
$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()) {
// ...
}
}
推荐阅读
- amazon-web-services - AWS CDK 多个应用程序
- java - 如何在集合中通过 id 查找?
- sql-server - PowerShell 导入模块 SqlServer 无法加载 PSSnapins.dll
- python - 单击按钮打开窗口,关闭当前窗口?
- node.js - AWS 环境变量独立于 shell
- android - 尝试在空对象引用上调用虚拟方法“long com.mesibo.api.JNIAPI.random()”
- optimization - PyTorch 的 Adam 自定义实现
- angular - 角度6 css绑定
- linux-kernel - 为什么 rndr 指令的输出与引导加载程序的熵混合以在 arm64 上形成 linux kaslr
- javascript - Angularjs表单验证多个输入值