CakePHP: HTML в setFlash () - PullRequest
       1

CakePHP: HTML в setFlash ()

2 голосов
/ 02 июля 2011

Мне интересно, есть ли правильный способ включить HTML в функцию setFlash () компонента Session.

В основном у меня есть этот интерфейс администратора на веб-сайте электронной коммерции, который позволяет администраторам создавать и редактировать "магазины", найденные на веб-сайте. После сохранения «магазина» я бы хотел, чтобы CakePHP отображал что-то вроде «Ваш магазин был успешно сохранен. Вернуться к индексу магазина». "Вернуться к индексу магазина" будет ссылка. В настоящее время я использую старый добрый HTML, например:

$this->Session->setFlash("Shop has been successfully published. <a href=\"...\">Return to Shop Index</a>");

Работает, но это HTML в контроллере, что я считаю "плохой вещью".

Спасибо!

EDIT:

Спасибо @YonoRan за решение. Пропустил это в документации CakePHP. Вот что я сделал:

1) Создан новый элемент session_flash_link.ctp в app/views/elements.

2) Добавлен следующий код в session_flash_link.ctp:

<div id="flashMessage" class="message">
<?php
echo $message;
echo $this->Html->link($link_text, $link_url, array("escape" => false));
?>
</div>

3) Код в контроллере:

$this->Session->setFlash("Shop has been successfully saved. ", "session_flash_link", array(
    "link_text" => "Return to Shop Management &raquo;",
    "link_url" => array(
        "controller" => "shops",
        "action" => "manage",
        "admin" => true
    )
));

Ответы [ 2 ]

5 голосов
/ 02 июля 2011

Это может быть решением для того, что вы пытаетесь сделать, он загружает «Макет» со всем HTML в нем как сообщение setFlash. Настраиваемое флэш-сообщение CakePHP

Обновление:

Я только что проверил Руководство для setFlash Руководство SetFlash

И это показывает, что выможно указать и элемент, содержащий HTML для сообщения setFlash + кучу других свойств.

setFlash($message, $element = 'default', $params = array(), $key = 'flash')

Так что, похоже, лучший способ сделать то, что предложено в первой ссылке, которую я опубликовал, потому что это нене требует нового макета, а просто использует элементы.

Удачи.

1 голос
/ 13 августа 2013

Я только что нашел другой способ сделать это, для которого не нужны новые специальные шаблоны:

Вы можете использовать HtmlHelper, к которому вы можете получить доступ, поскольку он, вероятно, загружен в представление, и у нас есть доступна это:

// access the html helper
$Html = (new View($this))->loadHelper('Html');
// use it to generate a link    
$resend = $Html->link(__('resend'), array(
    'controller' => 'users',
    'action' => 'resend',
));
// sprintf to insert the link to your standard message text!
$this->Session->setFlash(sprintf(_("Do you want to %s the email?"), $resend));

Должно работать в любом случае, когда вам нужна функциональность Helper в View.Работает в 2.3.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...