问题描述
我尝试在我的视图中解析json。 我在控制器中做到了
/**
* @Route(path="/newadmin/invoice/showAllContract",name="showAllContract")
* @param Request $request
* @return JsonResponse
*/
public function viewContract(Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$template_id = $request->get('user');
$getName = explode(" ",$template_id);
$firstname = $getName[0];
$lastname = $getName[1];
$templateRepository = $entityManager->getRepository(ClientContract::class)->getListPerUser($firstname,$lastname);
return new JsonResponse(json_encode($templateRepository));
}
它将返回一个我想在树枝中使用的json。
{{ form_start(createInvoice) }}
{{ form_row(createInvoice.daysWorked) }}
{{ form_row(createInvoice.bankHolidays) }}
{{ form_row(createInvoice.workSaturdays) }}
{{ form_row(createInvoice.workSundays) }}
{{ form_row(createInvoice.user) }}
{# my contract #}
{{ form_end(createInvoice) }}
<script>
$(document).ready(function () {
$('#invoice_manual_creation_user').change(function (message) {
$('#hidden').show();
let userName = $('#invoice_manual_creation_user option:selected').text();
console.log(userName)
$.get("{{ path('showAllContract') }}",{'user': userName})
});
});
</script>
在帮助我加深理解方面会提供帮助。
编辑:
谢谢您的帮助,我应该添加一些详细信息。
当您选择关联的用户时,我试图获取一份有效的合同,这就是为什么我在存储库中这样做了:
/**
* @param $firstname
* @param $lastname
* @return mixed
* @throws DBALException
*/
public function getListPerUser($firstname,$lastname)
{
$em = $this->getEntityManager();
$query = '
SELECT clientname
FROM contact_end_client c
INNER JOIN client_contract cli ON cli.clientname_id = c.id AND cli.active
INNER JOIN user u ON u.id = cli.user_id
WHERE u.firstname = :firstname AND u.lastname = :lastname AND cli.active = 1
';
$stmt = $em->getConnection()->prepare($query);
$param = ['firstname' => $firstname,'lastname' => $lastname];
$stmt->execute($param);
return $stmt->fetchAll();
}
解决方法
1个改进解决方案
- 在您的控制器中
如果您不知道symfony ParamConverter ,则必须查看它,它将对您有很大帮助。并了解原因 我使用了{id}通配符 / newadmin / invoice / {id} / showAllContract 和 viewContract(User $ user ...)
/**
* @Route("/newadmin/invoice/{id}/showAllContract",name="show_all_contract")
* @param User $user
* @param Request $request
* @return JsonResponse
*/
public function viewContract(User $user,Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$templateRepository = $entityManager->getRepository(ClientContract::class)->getListPerUser($user->getFirstname(),$user->getLastname());
return new JsonResponse(['templateRepository' => $templateRepository]);
}
- 在template.twig 中
<select id="invoice_manual_creation_user">
<option data-link="{{ path('show_all_contract',{'id' : createInvoice.user.id}) }}">Firstname Lastname</option>
</select>
//...
<script>
$(document).ready(function () {
$('#invoice_manual_creation_user').change(function (event) {
event.preventDefault();
$('#hidden').show();
var path = $(this).find(':selected').attr('data-link');
$.post(path,function(data) {
var templateRepository = data.templateRepository;
// do what you want with your data
});
});
});
</script>
2为您的解决方案
- 在模板树枝中
{{ form_start(createInvoice) }}
{{ form_row(createInvoice.daysWorked) }}
{{ form_row(createInvoice.bankHolidays) }}
{{ form_row(createInvoice.workSaturdays) }}
{{ form_row(createInvoice.workSundays) }}
{{ form_row(createInvoice.user) }}
// your list contract here
<ul id="my-contract-list">
</ul>
{{ form_end(createInvoice) }}
<script>
$(document).ready(function() {
$('#invoice_manual_creation_user').change(function(message) {
$('#hidden').show();
let userName = $('#invoice_manual_creation_user option:selected').text();
console.log(userName);
const url = "{{ path('showAllContract',{'user': " + userName + "}) }}";
$.get(url,function(data) {
var myContractListUl = $("#my-contract-list");
// if data is empty
if (data.length === 0) {
var li = $('<li></li>').text('Contracts not found');
myContractListUl.append(li);
return;
}
// we loop data and for each item we create li and append it to ul (my-contract-list)
$.each(data,function(index,item) {
var li = $('<li></li>').text(item.clinentName);
myContractListUl.append(li);
});
});
});
});
</script>