2016-07-09 3 views
0

В моей модели (Task) У меня есть функция:Как вызвать функцию в twig в Symfony2?

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 %} 

Я хочу, чтобы отобразить форму, если эта функция возвращает истину. Как я могу назвать эту функцию в 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-страницы, ваш контроллер получит данные формы и применить его.

Так что я бы сделал проверку в контроллере и только создал и передал форму шаблону ветки, если условие истинно.

Затем в прута вы можете использовать:

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

Передайте сущность задачи на прут и вызвать метод из объекта задачи:

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

Я изменил свой код, чтобы выглядеть так, но появилась некоторая ошибка: переменная «задача» не существует в Task/edit.html.twig в строке 7 – James

+0

Вам нужно передать объект Task from controller. к веточке. Вот пример: 'code' return $ this-> render ( 'main/main_wrapper.html.twig', ['task' => $ task] ); 'code' – user3743958

Смежные вопросы