首页 理论教育PHPMVC开发:简易实现

PHPMVC开发:简易实现

【摘要】:使用pear扩展包安装Symfony后,会将Symfony包的脚本命令一并安装,这也是Symfony的一大特色。xxx_dev.php只能用于调试阶段,一旦正式发布应用,应该要将其删除。打开apps/home/modules/news/actions/actions.class.php文件,接下来添加一个名为hello的动作,在hello动作中输出一串字符,代码如下所示。

使用pear扩展包安装Symfony后,会将Symfony包的脚本命令一并安装,这也是Symfony的一大特色。在命令行中使用symfony­V命令将会显示Symfony当前的版本。symfony命令提供了完善的项目管理操作,例如项目创建、单元测试、调试以及Symfony框架本身的升级维护等。作为开发人员,使用最多的还是利用symfony命令创建项目及应用,下面我们就使用symfony命令创建一个测试项目。

1.创建项目

在网站根目录下创建一个文件夹,并命令名为hello,该目录用于存放项目文件。打开命令行,定位到hello项目下,接下来的操作都位于该目录中。使用symfony generate:project hello命令创建一个名为hello的项目,该项目是基于Symfony框架的,命令执行完毕后,symfony工具自动创建了所需要的项目文件和目录,如图4-13所示。

978-7-111-42852-7-Part02-23.jpg

图4-13 项目目录结构

如图中所示,就是一个典型的Symfony项目目录,其中的web目录为网站(即应用)根目录,创建完项目后还需要创建应用,在Symfony框架中应用是一个比较严谨的概念,项目只是一个便于管理的模式,应用才是具体的行为,一个项目最少需要创建一个应用(最多可以无限)。

2.创建应用

应用存放于app目录下,一个项目可以有多个应用。比如前台应用可以命名为home;后台应用命名为admin,在团队开发时就可以非常方便地进行管理。

>symfony generate:app home

上述命令运行后将创建一个名为home的应用。结构如图4-14所示。

其中config目录存放应用配置信息文件,例如路由配置、缓存配置、数据库信息配置等;lib目录存放应用核心类库;modules目录存放控制器;templates目录存放全局布局文件,从这就可看出Symfony能够很好地管理着项目与应用之间的对应关系,并且提供了非常清晰及合理的MVC设计模式。home目录里的文件都是后台的,只需要被开发人员看到,而不需要前台用户访问。home的前台文件已经被生成到了web目录里,事实上web目录只需要存放应用的入口文件和应用的公共资源目录即可,如图4-15所示。

978-7-111-42852-7-Part02-24.jpg

图4-14 home应用目录结构

978-7-111-42852-7-Part02-25.jpg

图4-15 web目录结构

如图中所示,web目录存放允许被用户访问的资源以及文件,由于home项目为第一个创建的应用,所以symfony命令工具会自动地将该应用设置为项目的主应用(即入口应用),主应用的入口文件为index.php,如果再创建一个名为demo的项目,那么项目的入口文件就会变为demo.php。

home_dev.php是Symfony特有的项目调试文件。访问index.php文件并不会看到调试中的异常信息,但访问home_dev.php文件可以方便地查看到所有应用调试中的信息。xxx_dev.php只能用于调试阶段,一旦正式发布应用,应该要将其删除。

经过前面的介绍,现在我们已经非常地清楚了Symfony处理项目与应用文件结构的特性,虽然symfony命令工具生成了很多层次的目录结构,但归根结底用户访问到的只有web目录,所以只需要将域名绑定到项目下的web目录,即可完成项目部署。

3.绑定域名(www.chuimin.cn)

为了模拟真实的生产环境和便于测试,接下来将hello.localhost域名绑定到web目录。打开C:\WINDOWS\system32\drivers\etc\hosts文件,在文件中添加上hello.localhost域名,内容如下。

978-7-111-42852-7-Part02-26.jpg

打开apache配置文件(xampp的虚拟主机配置文件为xampp\apache\conf\extra\httpd-vhosts.conf),将hello项目下的web目录作为一个虚拟网站添加到配置文件中。

978-7-111-42852-7-Part02-27.jpg

上述配置操作都是基于Windows 7的,如果使用的是Linux系统,大体的步骤是一样的,只是在配置本地域名时使用hostname命令。配置完成后重新启动apache,以使新网站生效,此时通过http://helo.localhost域名应能够正确地访问到home项目中的web目录。

4.创建模块

经过前面的步骤,现在已经创建了1个项目、1个应用。在Symonfy框架中上述步骤只是创建一个网站的前提,在Symonfy中还有一个非常重要的概念,那就是模块。在前一节介绍的Zend Framework框架中,虽然也有模块,但概念并不是很清晰,通常称之为控制器,而在Symonfy中模块的概念非常清晰,它更像一个网站中的子网站或者频道,它的模块由一系列的控制器文件构成,默认的控制器文件为actions.class.php。下面将使用generate:module命令创建一个名为news的模块。

978-7-111-42852-7-Part02-28.jpg

上述命令将会在home应用下创建一个名称为news的模块,打开apps\home\modules\目录,将会看到由symfony工具生成的news模块,并且生成了actions目录及templates目录。actions用于存放模块控制器文件,默认生成的actions.class.php控制器文件代码如下。

978-7-111-42852-7-Part02-29.jpg

templates存放控制器动作相对应的模板,默认已生成indexSuccess.php文件,该文件即为index动作对应的模板。

5.开发应用

仍然以前面创建的hello.localhost应用为例,默认创建的news模块有一个默认的动作,即index动作。打开apps/home/modules/news/actions/actions.class.php文件,接下来添加一个名为hello的动作,在hello动作中输出一串字符,代码如下所示。

978-7-111-42852-7-Part02-30.jpg

上述代码是一个名为hello的控制器动作,可以看到它的命名方式为execute+动作名。其中动作名称的首字母必须大写。通过http://hello.localhost/news/hello将能够访问到该动作,在Symfony框架中,动作与模板必须要成对出现,这意味着还必须要创建一个对应的模板文件才能正常运行。接下来在apps/home/modules/news/templates/目录中创建动作模板,并命名为helloSuccess.php,代码如下所示。

978-7-111-42852-7-Part02-31.jpg

模板创建完毕后,此时就可以正常访问http://hello.localhost/news/hello了。