symfony link_to в действии - PullRequest
       48

symfony link_to в действии

4 голосов
/ 13 декабря 2011

Мне нужно дать ссылку в обратной связи с пользователем (через метод setFlash). Так что в моей функции processForm() я хочу использовать link_to, но это не сработает из-за строгой политики MVC Symfony. Я попытался написать <a href='#">somelink</a> вручную, но потом напечатал как есть.

Что может быть способом обойти это?

Ответы [ 4 ]

6 голосов
/ 13 декабря 2011

Вы можете получить доступ к «маршрутизации» в вашем контроллере.На самом деле, у него есть метод ярлыка:

Итак, в вашем действии:

$url = $this->generateUrl('your_route_name', array(/* parameters */));

Идеально подходит для Symfony MVC:)

Чтобы использовать это во флеше, выможет сделать следующее:

$this->getUser()->setFlash('success_raw', 'Click <a href="'.$url.'">here</a>');

Затем визуализировать в вашем представлении так:

echo $sf_user->getFlash('success_raw', ESC_RAW);

Эта последняя часть отображает любые HTML-объекты в выводе, поэтому всегда проверяйте, что данные в безопасности,Если он содержит какой-либо пользовательский ввод, убедитесь, что вы его отфильтровали.

2 голосов
/ 18 декабря 2011

Метод $ url = $ this-> generateUrl () - это действительно то, что вам нужно.Для текущей ситуации я думаю, что есть лучший подход.Вы можете установить флаг только тогда, когда текущая операция прошла успешно:

// in your action
$this->getUser()->setFlash('success', 1);

Затем, по вашему мнению, вы можете проверить этот флаг и использовать UrlHelper, чтобы распечатать ссылку:

<?php if ($sf_user->getFlash('success')): ?><br />
    <?php echo link_to(__('My message'), '@my_route') ?><br />
<?php endif ?>

Таким образом, вы можете легко локализовать ваше сообщение.

1 голос
/ 13 декабря 2011

В своих действиях вы можете использовать $this->generateUrl(), что очень похоже на link_to.

0 голосов
/ 13 декабря 2011

Это можно сделать, изменив часть, в которой вы распечатываете флэш-сообщение.

Например

У вас есть этот кусок кода:

Часть контроллера:

// Form save success.
$this->getUser()->setFlash('success', 'This is a ' . link_to('@myRouteName', 'link') . ' for testing.');

На ваш взгляд:

<?php
if ($sf_user->hasFlash('success'):
  echo $sf_user->getFlash('success');
endif;
?>

Как видите, идентификатор флеш-сообщения success. Это распечатает точный текст, который вы присвоили переменной flash. Вы можете распечатать ссылку, используя функцию getRawValue() следующим образом:

На ваш взгляд:

<?php
if ($sf_user->hasFlash('success'):
  echo $sf_user->getRawValue()->getFlash('success');
endif;
?>

Дополнительную информацию о выходных данных в Symfony можно найти здесь: http://www.symfony -project.org / api / 1_4 / sfOutputEscaper

...