Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
?$blogpost->setCreated(time());
$blogpost->setUserId(0);
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
$this->flashMessenger()->addErrorMessage('Blogpost id doesn\'t set');
return $this->redirect()->toRoute('blog');
}
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$post = $objectManager
->getRepository('\MyBlog\Entity\BlogPost')
->findOneBy(array('id' => $id));
if (!$post) {
$this->flashMessenger()->addErrorMessage(sprintf('Blogpost with id %s doesn\'t exists', $id));
return $this->redirect()->toRoute('blog');
}
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$post = $objectManager
->getRepository('\MyBlog\Entity\BlogPost')
->findOneBy(array('id' => $id));
if (!$post) {
$this->flashMessenger()->addErrorMessage(sprintf('Blogpost with id %s doesn\'t exists', $id));
return $this->redirect()->toRoute('blog');
}
$posts = $objectManager
->getRepository('\MyBlog\Entity\BlogPost')
->findBy(array('state' => 1), array('created' => 'DESC'));//class BlogPost
const PUBLISHED = 1;
const NOT_PUBLISHED = 0;
...
$posts = $objectManager
->getRepository('\MyBlog\Entity\BlogPost')
->findBy(array('state' => BlogPost::PUBLISHED), array('created' => 'DESC'));
$posts = $objectManager
->getRepository('\MyBlog\Entity\BlogPost')
->findPublished();
Проблема в том, что неудобно (а в Twig-шаблонах, которые мы будем использовать позже, и вовсе невозможно) вызывать PHP-код для вывода сообщений. По этому мы напишем небольшой View-плагин, который сможет одной строчкой выводить на экран все сообщения.
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="flash-notice">
{{ flashMessage }}
</div>
{% endfor %}
{% for flashMessage in flashMessenger().getMessages() %}
<div class="flash-notice"> {{ flashMessage }} </div>
{% endfor %}
{{ showMessages() }}
<span id="top-of-container">
{% if flash_error %}
{% include 'snippets/alert.danger.html.twig' %}
{% endif %}
{% if flash_warning %}
{% include 'snippets/alert.warning.html.twig' %}
{% endif %}
{% if flash_success %}
{% include 'snippets/alert.success.html.twig' %}
{% endif %}
{% if flash_console %}
<script type="text/javascript">
{% for flash in flash_console %}
console.info({{ flash|json_encode|raw }});
{% endfor %}
</script>
{% endif %}
</span>
ТО_ЧТО_УХОДИТ_В_ШАБЛОН_ТВИГА['flash_error'] = 'F*CK';
ТО_ЧТО_УХОДИТ_В_ШАБЛОН_ТВИГА['flash_error'][] = 'F*CK';
$blogpost->setCreated(time());Для этого есть Timestampable из DoctrineExtensions.
<?php
print $this->showMessages();
print '<h1>' . $post['title'] . '</h1>';
print '<div>' . $post['text'] . '</div>';
<?= $this->showMessage(); ?>
<h1><?= $post['title']; ?></h1>
<div><?= $post['text']; ?></div>
Кроме того, я добавил к форме Csrf-токен (поле security), который должен защитить форму от подделки.. В представлении нужном, это поле не выводится.
echo $this->formRow($form->get('security'));
Пример разработки блога на Zend Framework 2. Часть 2. Модуль MyBlog