Управление на публикации Създаване и редактиране, изграждане на блог с помощта на Yii 1
1. Настройване на правила за достъп ¶
Първото нещо, което планирахме, е да настроим права за достъп. Кодът, генериран с yiic, няма да работи за нас.
Трябва да промените метода accessRules() във файла /wwwroot/blog/protected/controllers/PostController.php, както следва:
Правилата, описани по-горе, позволяват на всички потребители да изпълняват списъка и да показват действия. Удостоверен - всякакви действия, включително администраторски. На всички други потребители е забранено всичко. Струва си да се отбележи, че правилата се прилагат в реда, в който са описани. Първото правило, което се активира, определя дали да се предостави достъп или не. Например, ако текущият потребител е собственик на системата и се опита да влезе в страницата за създаване на запис, второто правило ще бъде приложено и достъпът ще бъде разрешен.
2. Редакции в действията за създаване и актуализиране ¶
Операциите за създаване и актуализиране са доста сходни. И в двата случая трябва да покажете HTML формуляр за събиране на въведени от потребителя данни. Освен това изисква валидиране и запазване на данни в базата данни. Основната разлика е, че при актуализация формулярът ще бъде попълнен с данни за записа, който се редактира. Поради тази причина yiic генерира вложен изглед /wwwroot/blog/protected/views/post/_form.php , който е включен както в изгледа за създаване, така и в изгледа за актуализиране, за да изобрази HTML формата.
Първо, нека променим файла _form.php, така че формулярът да събира само данните, от които се нуждаем: заглавие, съдържание и статус. За първите два атрибута използваме текстови полета. За статус, падащ списък с всички възможни състояния на публикации:
Съвет: Можете да използвате Post::model()->getStatusOptions() вместо Post::model()->statusOptions, за да получите статуси. Това е възможно, защото Post е компонент, който давани възможността да използваме свойства, дефинирани като методи (getters).
След това ще променим класа Post, за да зададе автоматично някои атрибути (като createTime и authorId) точно преди публикацията да бъде запазена в базата данни. Заменете метода beforeValidate():
Тъй като искаме да запазим етикетите на публикацията в таблицата Tag, трябва да добавим метод към класа Post, който ще бъде извикан автоматично, след като публикацията бъде запазена:
Първо премахваме всички записи, свързани с този, от таблицата PostTag. След това вмъкваме нови етикети в таблицата с етикети и добавяме съответния запис към PostTag. Логиката в този случай е малко сложна, така че вместо да използваме ActiveRecord, ние пишем SQL изрази и ги изпълняваме директно през връзката с базата данни.
Съвет: Добра практика е да отделите бизнес логиката като beforeValidate() и afterSave(), описани по-горе, и да я поставите в модели, а не в контролери.