簡體   English   中英

樹枝中不存在Symfony變量

[英]Symfony variable does not exist in twig

我有這兩個實體Users.phpsprovider.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 函數並傳遞userjobs ,然后去掉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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM