[英]Symfony variable does not exist in twig
我有這兩個實體Users.php
和sprovider.php
以及一個UserController.php
困擾我的是當我嘗試在此函數中呈現模板時的結果。
/**
* @Route("/sproviderhome", name="sprovider_home")
*/
public function sproviderHomeAction(Request $request){
$email = $request->get('email');
$password = $request->get('password');
$user= $this->getDoctrine()
->getRepository('AppBundle:Users')->
findOneBy(array('email' => $email, 'password' => $password));
$jobs = $this->getDoctrine()
->getRepository('AppBundle:jobs')
->findAll();
if($user){
return $this->render('home/sprovider.html.twig', array(
'user' => $user,
'jobs' => $jobs,
));
}else{
return $this->render('home/login.html.twig', array(
'message' => "Sorry, you need to login first.",
));
}
}
結果sprovider.html.twig
:
home/sprovider.html.twig 第 8 行中不存在變量“jobs”
sprovider.html.twig:
{% extends '::base.html.twig' %}
{% block body %}
{% if user is defined %}
<h2 class="page-header">Welcome {{ user.name }}</h2>
{% endif %}
{% for job in jobs %}
{{ job.name }}
{% endfor %}
{% endblock %}
這里奇怪的是$user
存在但$jobs
不存在。
到目前為止我嘗試的是轉儲jobs
,沒有問題,工作在變量中。
我嘗試的另一件事是傳遞這樣的字符串:
return $this->render('home/sprovider.html.twig', array(
'user' => $user,
'jobs' => 'jobs',
));
結果一樣。 看起來它只渲染第一個對象,這很奇怪,因為我正在傳遞一個array()
。 我錯過了什么重要的東西嗎? 這可能與cache
嗎? 我清除了瀏覽器和學說緩存,仍然沒有。 我想不出還有什么原因會導致這種情況。 在同一個控制器中的其他函數中,我在渲染數組時沒有問題。
如果之前沒有定義放置條件的作業變量,您可以使循環安全。
{% if jobs is defined %}
{% for job in jobs %}
{{ job.name }}
{% endfor %}
{% else %}
No jobs found.
{% endif %}
我找到了解決方案。 我正在使用一個登錄表單,在重定向到不同的“主頁”之前檢查用戶的類型。 結果我沒有將被檢查的user
傳遞給這個sproviderHome
函數,而是直接渲染sprovider.html.twig
只傳遞一個變量 -> user
。
解決方案1
添加
$jobs = $this->getDoctrine()
->getRepository('AppBundle:jobs')
->findAll();
到 login 函數並傳遞user
和jobs
,然后去掉sproviderHome
函數。
解決方案 2更整潔的解決方案
我沒有在登錄函數中return $this->render(........)
,而是使用了
return $this->forward('AppBundle:User:sproviderHome', array(
'user'=>$user
));
然后將$user
作為參數添加到sproviderHome
函數中。 然后添加
$jobs = $this->getDoctrine()
->getRepository('AppBundle:jobs')
->findAll();
在功能上,一切都很好。 也擺脫Request $request
作為參數並刪除這兩行
$email = $request->get('email');
$password = $request->get('password');
向那些努力了卻沒有結果的人道歉。 我沒有提到登錄功能的錯誤。
您需要首先檢查作業是否存在。
{% if jobs is defined %}
{% for job in jobs %}
{{ job.name }}
{% endfor %}
{% else %}
Something else
{% endif %}
改變
{% for job in jobs %}
{{ jobs.name }}
{% endfor %}
到
{% for job in jobs %}
{{ job.name }}
{% endfor %}
和
$jobs = $this->getDoctrine()
->getRepository('AppBundle:jobs')
->findAll();
到
$jobs = $this->getDoctrine()
->getRepository('AppBundle:Jobs')
->findAll();
添加這個可能會更好
{% if jobs is iterable %}
{% for job in jobs %}
{{ job.name }}
{% endfor %}
{% endif %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.