Статьи

Начало работы с Cake PHP: часть 2

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

Наша цель — создать компоненты приложения для личного блога. К тому времени, когда мы завершим проект, мы добавим эффекты Web 2.0 и предложим интеграцию с другими сервисами, чтобы приложение было завершено. Однако прежде чем мы сможем начать наш проект, нам нужно определить план разработки с некоторым списком функций, которыми мы будем руководствоваться.

Вот небольшой список основных функций, которые мы обсудим и включим в наше законченное приложение:

  • Защищенная система с минимальными возможностями для одного автора
  • Функции публикации будут включать в себя функции комментирования, обеспечивать обратную связь с блогом и позволять включать изображения и загрузки
  • Полнотекстовая поисковая система с использованием Sphinx
  • Интеграция с внешними сервисами, такими как Gravatar и Askimet Защита от спама / Управление спамом
  • Усовершенствования Javascript, включая возможности редактора WYSIWYG, Ajax Live Search, предварительный просмотр комментариев Ajax, быстрая загрузка функций публикации / редактирования / удаления Ajax, а также проверка формы Ajax
  • Интеграция приложения с Facebook для быстрой разработки Facebook (цели этой функции включают отправку сообщений в новостную ленту Facebook и получение личных данных из API Facebook, чтобы сделать блог немного более личным)

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

Без дальнейших церемоний, давайте вернемся к CakePHP.

Как упоминалось ранее, модели взаимодействуют с базовой базой данных платформы. По умолчанию CakePHP поставляется с рядом встроенных методов, чтобы избавить нас от переписывания кода для реализации общих функций. Наряду с ожидаемыми методами чтения и записи / сохранения вы также можете использовать «магические методы», такие как findBy <fieldName>, которые найдут строки, соответствующие определенному полю запроса. Это реальное улучшение по сравнению с использованием типичных запросов «SELECT * FROM».

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

Мы сделаем все это с помощью небольшой таблицы MySQL, реализованной с помощью следующего оператора CREATE TABLE:

1
2
3
4
5
6
7
8
9
CREATE TABLE `authors` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL default »,
  `password` varchar(32) NOT NULL default »,
  `name` varchar(255) NOT NULL default »,
  `email` varchar(255) NOT NULL default »,
  `bio` text NOT NULL,
  PRIMARY KEY (`id`)
)
Структура таблицы

Нам также понадобится базовая начальная учетная запись, поэтому мы также вставим строку, пока мы на ней (имя пользователя и пароль для начальной учетной записи — test / test):

1
INSERT INTO `authors` (`username`, `password`, `name`, `email`, `bio`) VALUES (‘test’, ‘098f6bcd4621d373cade4e832627b4f6’, ‘Test’, ‘[email protected]’, ‘Hello world…’);

Назначение структуры таблицы заключается в следующем:

  • id будет использоваться для уникального идентификатора пользователя при загрузке профиля.
  • имя пользователя будет использоваться для входа в область управления.
  • пароль будет хэшированным паролем md5, используемым для входа в область управления.
  • Имя будет использоваться в авторах и на странице автора. Это публичное отображаемое имя, потому что имя пользователя фактически не отображается.
  • электронная почта будет использоваться для любой будущей функциональности (например, уведомления о комментариях).
  • bio будет использоваться для хранения биографической информации об авторе (например, страницы автора, которые можно увидеть здесь в NETTUTS).

Теперь нам нужно создать модель. Для этого создайте новый файл в папке / app / models / с именем author.php со следующим содержимым:

1
<?php<br />class Author extends AppModel<br />{<br /> var $name = ‘Author’;<br />}<br />?>
Код модели

Модель для этой функциональности на самом деле довольно простая. Поскольку необходимая нам функциональность, такая как findByUsername или save, уже покрыта функциями в Model (которая расширена AppModel), мы закончили со стороной модели. Этот общий файл просто позволяет нам взаимодействовать с таблицей Author.

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

Представления в основном представляют собой смесь HTML и помощников . В других системах мы бы назвали эти шаблоны. Помощники генерируют общий код или помогают с общими задачами. Некоторые типы помощников, найденные в CakePHP, — это HTML-помощники и Pagination.

Чтобы установить представления, создайте папку в / app / views / с именем авторов /, чтобы мы могли хранить все наши представления. Наше первое представление должно называться login.thtml со следующим содержимым:

Вместо использования тегов <input> мы используем один из помощников для генерации допустимых полей ввода, которые можно использовать в наших контроллерах. Мы также поместили немного проверки ошибок в верхней части шаблона на случай, если пользователь введет неправильное имя пользователя или пароль. Переменная ошибки устанавливается позже в контроллере.

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

Выход из системы на самом деле не нуждается в собственном представлении, потому что мы просто перенаправим пользователей обратно на страницу индекса блога и отобразим сообщение об успешном завершении. Однако для обновления информации о профиле в управлении пользователями нужна форма. Поэтому нам нужно написать представление для этого.

Создайте шаблон с именем manage.thtml со следующим содержимым:

Это представление очень похоже на нашу форму входа в систему, за исключением того, что мы управляем некоторыми различными полями, и мы включаем другой вспомогательный метод ($ html-> textarea) для создания текстовой области.

Большой! Теперь, когда написан наш небольшой набор представлений, мы можем перейти к контроллерам.

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

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

Сначала создайте файл в app / controllers / namedhors_controller.php. Теперь пройдемся по коду шаг за шагом.

Наша индексная функция довольно проста. Сейчас мы просто перенаправим на индекс скрипта, используя встроенную функцию CakePHP с именем «redirect».

Наша функция входа немного более продвинутая. Сначала мы устанавливаем для переменной error значение false, чтобы PHP не выдавал уведомление о неопределенной переменной. Затем мы проверяем, отправлены ли какие-либо данные. «$ this-> data» содержит все входные данные из формы входа и имеет формат $ this-> data [‘CONTROLLER’] [‘FIELD’]. Теперь мы видим наш магический метод «findByUsername». используется для нахождения любых строк, содержащих имя пользователя, который только что вошел в систему. Если у нас есть совпадение пользователей, мы затем сравниваем пароли и пишем сеанс, используя обработчик сеанса CakePHP. Если есть проблема, мы устанавливаем «error» в true, чтобы наше представление могло обработать сообщение. Система входа не может быть намного проще, чем это!

Экран входа

Функция выхода из системы еще проще. Мы используем класс сеанса CakePHP, чтобы полностью удалить сеанс, а затем используем метод «flash» для перенаправления. Метод flash немного отличается от метода перенаправления, потому что мы можем отправить сообщение обратно на экран. Это становится полезным, потому что мы действительно можем дать пользователям знать, что что-то произошло.

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

Экран выхода

Наша самая продвинутая функция для этого контроллера — это функция управления . Большая часть функциональности реализована с использованием только что представленных методов. В этой функции нужно отметить одну вещь — установить переменную $ this-> author-> id перед сохранением и чтением. Это говорит модели, с какой строкой иметь дело, поэтому она не пытается сохранить или вставить новую строку целиком. Мы также имеем дело с большей функциональностью сеанса, читая идентификатор из хеша.

Наш последний шаг — защитить страницу управления. Мы хотим, чтобы только зарегистрированные пользователи видели эту страницу, и мы можем обеспечить защиту с помощью простой функции проверки. Это часть функциональности, которая нам также понадобится для будущих экранов, поэтому мы должны хранить ее в общем месте. Как упоминалось ранее, все контроллеры CakePHP наследуются от контроллера под названием «AppController», который прямо сейчас представляет собой пустой файл, расположенный в каталоге тортов .

Мы создадим AppController для конкретного приложения, создав файл app_controller.php в папке app / , и вставим следующее содержимое:

Мы просто проверяем сеанс и, если его там нет, отправляем пользователя на экран входа. Эта функция теперь может использоваться в любом методе контроллера.

Наш последний шаг — вызвать функцию из нашей функции управления. Мы открываем наш файл app / controller /hors_controller.php и находим:

и добавить

прямо под ним.

Управление экраном

Действия могут быть протестированы и доступны по следующим URL:

  • http: //yoursite.tld/ авторы / логин /
  • http: //yoursite.tld/ авторы / управление /
  • http: //yoursite.tld/ авторы / выход /

Имя пользователя учетной записи — тестовое, а пароль — тестовый.

Эта статья была призвана представить некоторые основные функции CakePHP с примерами в контексте создания приложения для личного блога. Мы начали с некоторой функциональности страницы пользователя / автора, чтобы представить основные концепции разработки приложений с помощью CakePHP, прежде чем мы перейдем (в следующем уроке) к написанию пост-контроллера. Таким образом у нас будет лучшее понимание того, как все в структуре объединяется. Нам еще предстоит пройти долгий путь до того, как наше приложение для блога будет завершено, поэтому приготовьтесь углубиться в CakePHP, чтобы в следующий раз мы смогли заставить работать все функции блогов и комментариев!