CakePHP 入门:事件管理器

Avatar of Roma Azarov
Roma Azarov 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

以下是 Roma Azarov 的客座文章。我能够轻松地按照步骤操作,并在几分钟内在我的机器上运行演示应用程序。快速构建强大的 Web 应用程序变得如此简单,这真是太棒了。

CakePHP 是一个免费的、开源的、用于 PHP 的快速开发框架。它是程序员创建 Web 应用程序的基础结构,使您能够以结构化和快速的方式工作,而不会损失灵活性。在本教程中,我们将探讨使用 CakePHP 的好处,并提供一个示例项目,一个事件管理器风格的应用程序,以帮助您入门。

CakePHP 消除了 Web 开发的单调性。我们为您提供开始编写真正需要完成的代码所需的所有工具:特定于您的应用程序的逻辑。无需每次开始新项目时都重新发明轮子,请查看 CakePHP 的副本,并开始使用应用程序的真正核心。CakePHP 拥有一个活跃的开发团队和社区,为该项目带来了巨大的价值。除了避免重新发明轮子之外,使用 CakePHP 还意味着您的应用程序的核心经过了充分测试,并且正在不断改进。

以下是在使用 CakePHP 时您将享受的一些功能列表

  • 活跃友好的社区
  • 灵活的许可
  • 兼容 PHP 4 和 5 版本
  • 集成的 CRUD 用于数据库交互
  • 应用程序脚手架
  • 代码生成
  • MVC(模型、视图、控制器)架构
  • 请求分派器,具有简洁的自定义 URL 和路由
  • 内置验证
  • 快速灵活的模板(PHP 语法,带助手)
  • 用于 AJAX、JavaScript、HTML 表单等的视图助手
  • 电子邮件、Cookie、安全、会话和请求处理组件
  • 灵活的 ACL(访问控制列表)
  • 数据清理
  • 灵活的缓存
  • 本地化
  • 可以从任何网站目录运行,几乎不需要 Apache 配置。

构思

本教程的主要思想是使用 CakePHP 创建一个简单的事件管理器。我们的项目将

  • 创建/更新/删除事件,无论是否附加位置(这通常称为 CRUD 风格的应用程序)
  • 创建/更新/删除位置
  • 以**列表**视图或**日历**视图显示所有事件
  • 为所有事件提供 RSS Feed

我们的项目还包括以下高级技术概念

  • 使用第三方组件(Swift Mailer)
  • AJAX 功能(jQuery + CakePHP)
  • 自定义助手
  • 自定义用户访问控制(基于用户角色)
  • 创建后端

以下是运行此项目所需的条件

  1. 启用了 mod_rewrite 的 Apache Web 服务器
  2. PHP 5 或更高版本
  3. MySQL
  4. SVN 客户端

项目安装

如果您希望在本地工作,使用 MAMP/LAMP/WAMP 等工具是一个不错的选择。您可以创建一个本地开发域名并在那里工作。

无论您选择在哪里工作,请在服务器的根目录中创建一个文件夹。您可能正在使用 MAMP/WAMP/LAMP 等工具在本地工作,或者正在在线开发服务器上工作。您可以根据需要命名它。使用您的 shell 访问权限导航到此文件夹并运行以下命令

svn checkout http://cakephp-tricks.googlecode.com/svn/trunk/ cakephp-tricks-read-only

创建数据库和 SQL 结构

现在您需要在 MySQL 中创建一个新数据库。可以通过您的 Web 主机提供的任何方式进行操作,或者在本地使用 Sequel Pro 等工具。

您可以根据需要为其命名并设置密码。然后,您需要运行此 SQL 来设置结构

CREATE DATABASE `tricks_cake`;

USE `tricks_cake`;

/* Table structure for table `events` */
DROP TABLE IF EXISTS `events`;
CREATE TABLE `events` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned default NULL,
  `location_id` int(10) unsigned default NULL,
  `exp_date` datetime default NULL,
  `title` varchar(255) default '',
  `description` text,
  `url` varchar(255) default '',
  `complete` enum('yes','no') default 'no',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/* Table structure for table `locations` */
DROP TABLE IF EXISTS `locations`;
CREATE TABLE `locations` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned default NULL,
  `title` varchar(255) default '',
  `city` varchar(50) default '',
  `state` varchar(2) default '',
  `zip` int(10) unsigned default NULL,
  `address1` varchar(255) default '',
  `address2` varchar(255) default '',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/* Table structure for table `users` */
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `email` varchar(50) default '',
  `pass` varchar(50) default '',
  `enabled` enum('yes','no') default 'yes',
  `activated` enum('yes','no') default 'no',
  `ac_code` varchar(32) default '',
  `role` enum('admin','user') default 'user',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

此 SQL 也位于项目中的 /app/config/schema/structure.sql 中。

设置项目文件

现在我们已经安装了 CakePHP 项目并使用服务器环境进行了设置,让我们看一下代码。我们需要对配置文件进行一些更改。

core.php

这是主要的配置文件。您需要将默认配置文件(位于 /app/config/core.php.default)重命名或复制为 core.php,并放在同一文件夹中。接下来,您需要更改一些自定义设置。

以下几行需要在该文件中已有的代码中进行调整,并帮助我们从应用程序发送电子邮件(需要用于发送新用户确认电子邮件)

// SMTP
    Configure::write( 'smtp_type', 'tls' );
    Configure::write( 'smtp_timeout', 60 );
    Configure::write( 'smtp_host', 'smtp.gmail.com' );
    Configure::write( 'smtp_port', 465 );
    Configure::write( 'smtp_user', '[email protected]' );
    Configure::write( 'smtp_password', '' );
    Configure::write( 'smtp_encryption', 'ENC_SSL' );
    Configure::write( 'smtp_mail_from_name', 'noreply' );
    Configure::write( 'smtp_mail_from_addr', '[email protected]' );

以上值用于我们专门为此创建的测试/垃圾 Gmail 帐户。如果您计划从自己的 Google 帐户发送电子邮件,则需要更改 3 个变量:smtp_usersmtp_passwordsmtp_mail_from_addr

现在将项目的 site_name 更改为其所在的 URL

// globals
    Configure::write( 'site_name', 'learning-cakephp.dev' );

在扩展项目时,您可能希望更改其他值,但现在您无需执行此操作。您可以阅读更多关于 CakePHP core.php 配置变量的信息

database.php

这是数据库配置文件。您需要将此文件(位于 /app/config/database.php.default)重命名或复制为 database.php,并放在同一目录中。然后填写 $default 连接数组。完成的配置应如下所示

var $default = array('driver'      => 'mysql',
                    'persistent'  => false,
                    'host'        => 'localhost',
                    'login'       => 'cakephpuser',
                    'password'    => 'c4k3roxx!',
                    'database'    => 'my_cakephp_project',
                    'prefix'      => '');

这些是创建项目数据库时的数据库连接详细信息。有关 数据库配置 的更多信息。

routes.php

路由是一项将 URL 映射到控制器操作的功能。它被添加到 CakePHP 中以使漂亮的 URL 更易于配置和灵活。使用 Apache 的 mod_rewrite 不是使用路由的必要条件,但它会使您的地址栏看起来更整洁。目前您无需更改此文件,但您可以阅读有关此文件(以备将来使用)的信息 此处

app_controller.php

此文件(位于 /app/app_controller.php)是项目中所有控制器的父类。如果此文件存在,所有 Controller 类都将继承自我们的 app_controller。如果它不存在,它们将继承自库中的默认文件 /cake/libs/controller/app_controller.php。如果我们需要扩展所有控制器,这将非常有用。您可以阅读更多关于 App Controller 信息

app_model.php

本文件(位于 /app/app_model.php)是项目中所有模型的父类。它的作用类似于 app_controller,但适用于所有模型。如果您查看任何模型代码 (/app/models),您会发现我们使用 $validationSet 属性(而不是原始的 $validate 属性)来创建验证方案列表,这允许更灵活地将验证数据存储在数据库中。此外,我们使用 app_model 来编写自定义验证规则,以便在所有模型中使用。

address.php

此文件(位于 /app/views/helpers/address.php)演示了如何为您的项目创建自定义助手。您可以阅读 此处关于助手的更多信息

第三方库

我们使用第三方库 SwiftMailer 发送电子邮件,而不是内置的 EmailComponent,以演示 CakePHP 如何与第三方库协同工作。SwiftMailerComponent(位于 /app/controllers/components/swift_mailer.php)用于从我们的 CakePHP 项目访问 SwiftMailer 库。您可以阅读 此处关于组件的更多信息

附加结构

最后,关于代码结构的几点说明。CakePHP 具有 Controller、Model 和 View 类,但它还具有一些其他类和对象,使 MVC 开发更加快捷和愉悦。组件、行为和助手是提供可扩展性和可重用性的类,可以快速地向应用程序中的基本 MVC 类添加功能。目前,我们将保持较高的层次,因此以后再详细了解如何使用这些工具。您可以阅读更多关于 类的信息 和更多关于 CakePHP 约定 的信息。

访问管理区域

  1. 至少注册一个用户(你自己)。
  2. 在您的数据库中,找到您在“users”表中的记录。
  3. 将您用户的“role”字段值更改为“admin”,而不是“user”。
  4. 登录,您现在将在导航栏中看到“backend”链接。

继续!

现在您可以开始研究我们的教程项目了!在浏览器中访问您的开发域名应该会显示应用程序。您将能够注册帐户、激活它,然后创建/更新/删除事件和位置,以及在两种不同的视图中查看它们。

可写错误?

如果您收到关于缓存文件不可写的错误,请确保 /app/tmp 文件夹是可写的,然后将这些权限应用于所有子文件夹。