2016-07-09 21 views
0

は私のモデル(タスク)I持っている機能では:小枝でSymfony2でtwigの関数を呼び出す方法は?

public function isTaskOverdue() 
    { 
     if ("now"|date('Y-m-d') > task.deadline|date('Y-m-d')){ 
      return false; 

     } else{ 
      return true; 
     } 
    } 

(編集)私は、フォームを表示する:

{% extends 'base.html.twig' %} 

{% block title %}app:Resources:Task:edit{% endblock %} 

{% block body %} 

     {{ form(form) }} 

{% endblock %} 

私は、この関数はtrueを返す場合、フォームを表示します。 この機能をtwigでどのように呼び出すことができますか?

+0

PHPでは、あなたは、直接必要を2つの日付を比較することはできませんそれらをフォーマットする。それはあなたが "今"の日付を取得するために、日付フィルタを適用する必要があります。 – Alsatian

答えて

0

私はそれが関数の結果を受け取り、それに応じてフォームを表示するかどうかをコントローラに知らせるべきだと思います。

そうのようなまた、あなたの関数を書くことができます。

public function isTaskOverdue() 
    { 
     return ("now"|date('Y-m-d') > task.deadline|date('Y-m-d')); 
    } 
0

が小枝と行うには、タスクエンティティを渡します

{% extends 'base.html.twig' %} 

{% block title %}app:Resources:Task:edit{% endblock %} 

{% block body %} 

    {% if "now"|date("Ymd") <= task.deadline|date("Ymd") %} 

     {{ form(form) }} 

    {% endif %} 

{% endblock %} 

しかし、注意:

あなただけではない場合にはフォームを表示すると、セキュリティ上の問題が発生します。攻撃者が再構築したHTMLページからフォームを送信すると、コントローラはフォームデータを受信するためですそれを適用します。

私はコントローラのチェックを行い、条件が満たされている場合にのみ、フォームを作成してtwigテンプレートに渡します。

その後、小枝にあなたが使用することができます。

{% if form is defined %} 
    {{ form(form) }} 
{% endif %} 
1

はタスクエンティティを渡し小枝や対象タスクからメソッドを呼び出すには:

{% if task.isTaskOverdue %} 
    {{ form(form) }} 
{% endif %} 
+0

私のように見えるようにコードを変更しましたが、エラーが表示されました:Variable "task"がTask/edit.html.twigの7行目に存在しません – James

+0

コントローラからオブジェクトTaskを渡す必要があります。つぶやくここで例を挙げます: 'code'は$ this-> renderを返します( 'main/main_wrapper.html.twig'、 ['task' => $ task] ); 'code' – user3743958

関連する問題