Чат веб-разработчиков
Редактирование статей на сайте на PHP

Редактируем статьи в блоге на PHP

Сегодня мы создадим еще один компонент нашего блога – систему редактирования статей.

В одном из прошлых уроков мы уже добавляли роутинг для редактирования статей:

src/routes.php

Код доступен только после покупки курса ООП в PHP.

Он останется прежним. Переходим к экшену. Сейчас он выглядит вот так:

src/MyProject/Controllers/ArticlesController.php

Код доступен только после покупки курса ООП в PHP.

Нам требуется его переписать, чтобы статья обновлялась данными из POST-запроса. Делаем:

Код доступен только после покупки курса ООП в PHP.

Теперь давайте добавим соответсвующий шаблон.

templates/articles/edit.php

Код доступен только после покупки курса ООП в PHP.

А теперь добавим соответствующий метод в модели:

src/MyProject/Models/Articles/Article.php

Код доступен только после покупки курса ООП в PHP.

Заходим теперь на страничку редактирования статьи:
http://myproject.loc/articles/14/edit

Редактирование статьи

Вводим какой-нибудь новый текст и заголовок.
Изменяем статью

Нажимаем на кнопку обновления и вуаля – статья обновлена.
Обновленная статья

Читайте также
Комментарии


Kirill.K
Kirill.K

ArticlesController/edit:

if(!$this->user->isAdmin()) {
            throw new Forbidden('Для редактирования статьи нужно обладать правами администратора');
        }

Templates/articles/view:

<?php if(isset($_COOKIE['token']) and $user->isAdmin()): ?>
    <p><a href="http://myproject.loc/articles/<?= $article->getId() ?>/edit">Редактировать статью</a></p>
<? endif; ?>
ivashkevich
ivashkevich
isset($_COOKIE['token'])

Этого достаточно, чтобы знать, что пользователь залогинен? А если в этой куке ерунда какая-нибудь бессмысленная записана? Тогда $user будет null, и при попытке вызвать у него метод произойдет ошибка.

Kirill.K
Kirill.K

Хм... тогда, наверное, так:

<?php if($_COOKIE['token'] === $user->getId() . ':' . $user->getAuthToken() and $user->isAdmin()): ?>
    <p><a href="http://myproject.loc/articles/<?= $article->getId() ?>/edit">Редактировать статью</a></p>
<? endif; ?>

Громоздко, конечно, как то получается...

ivashkevich
ivashkevich

Да нет, все проще. Если пользователь не авторизован, то в $user будет null.
Достаточно проверить:

if ($user !== null && $user->isAdmin())