接下来将使用CodeIgniter实现一个简单的新闻列表,用户点击列表中的新闻标题将会进入新闻的正文页面,通过该例子演示CodeIgniter实现MVC开发的流程。在CodeIgniter中,控制器命名规则比较灵活,它不需要加前缀或后缀,一个普通的文件即可。......
2023-11-04
使用pear扩展包安装Symfony后,会将Symfony包的脚本命令一并安装,这也是Symfony的一大特色。在命令行中使用symfonyV命令将会显示Symfony当前的版本。symfony命令提供了完善的项目管理操作,例如项目创建、单元测试、调试以及Symfony框架本身的升级维护等。作为开发人员,使用最多的还是利用symfony命令创建项目及应用,下面我们就使用symfony命令创建一个测试项目。
1.创建项目
在网站根目录下创建一个文件夹,并命令名为hello,该目录用于存放项目文件。打开命令行,定位到hello项目下,接下来的操作都位于该目录中。使用symfony generate:project hello命令创建一个名为hello的项目,该项目是基于Symfony框架的,命令执行完毕后,symfony工具自动创建了所需要的项目文件和目录,如图4-13所示。
图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所示。
图4-14 home应用目录结构
图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域名,内容如下。
打开apache配置文件(xampp的虚拟主机配置文件为xampp\apache\conf\extra\httpd-vhosts.conf),将hello项目下的web目录作为一个虚拟网站添加到配置文件中。
上述配置操作都是基于Windows 7的,如果使用的是Linux系统,大体的步骤是一样的,只是在配置本地域名时使用hostname命令。配置完成后重新启动apache,以使新网站生效,此时通过http://helo.localhost域名应能够正确地访问到home项目中的web目录。
4.创建模块
经过前面的步骤,现在已经创建了1个项目、1个应用。在Symonfy框架中上述步骤只是创建一个网站的前提,在Symonfy中还有一个非常重要的概念,那就是模块。在前一节介绍的Zend Framework框架中,虽然也有模块,但概念并不是很清晰,通常称之为控制器,而在Symonfy中模块的概念非常清晰,它更像一个网站中的子网站或者频道,它的模块由一系列的控制器文件构成,默认的控制器文件为actions.class.php。下面将使用generate:module命令创建一个名为news的模块。
上述命令将会在home应用下创建一个名称为news的模块,打开apps\home\modules\目录,将会看到由symfony工具生成的news模块,并且生成了actions目录及templates目录。actions用于存放模块控制器文件,默认生成的actions.class.php控制器文件代码如下。
templates存放控制器动作相对应的模板,默认已生成indexSuccess.php文件,该文件即为index动作对应的模板。
5.开发应用
仍然以前面创建的hello.localhost应用为例,默认创建的news模块有一个默认的动作,即index动作。打开apps/home/modules/news/actions/actions.class.php文件,接下来添加一个名为hello的动作,在hello动作中输出一串字符,代码如下所示。
上述代码是一个名为hello的控制器动作,可以看到它的命名方式为execute+动作名。其中动作名称的首字母必须大写。通过http://hello.localhost/news/hello将能够访问到该动作,在Symfony框架中,动作与模板必须要成对出现,这意味着还必须要创建一个对应的模板文件才能正常运行。接下来在apps/home/modules/news/templates/目录中创建动作模板,并命名为helloSuccess.php,代码如下所示。
模板创建完毕后,此时就可以正常访问http://hello.localhost/news/hello了。
有关PHP MVC开发实战的文章
接下来将使用CodeIgniter实现一个简单的新闻列表,用户点击列表中的新闻标题将会进入新闻的正文页面,通过该例子演示CodeIgniter实现MVC开发的流程。在CodeIgniter中,控制器命名规则比较灵活,它不需要加前缀或后缀,一个普通的文件即可。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
事实上,ThinkPHP已经完美地解决了读写分离功能,本节将会详细介绍。本例中主数据库的ip地址为192.168.2.1;从数据库的ip地址为192.168.2.2,读者可以使用虚拟机来模拟上述环境。配置完成后,保存配置文件,重启MySQL数据库。接下来将结合ThinkPHP实现数据的读写分离。ThinkPHP提供了完善的读写分离功能,开发人员不需要手动切换数据库。......
2023-11-04
图9-8 简体中文首页表单前面提到过,在默认情况下系统会自动识别当前的浏览器语言环境,并调用相应的语言包。l=zh-tw,表单中的文字将转换为简体中文模式,如图9-9所示。图9-9 繁体中文首页表单在后台中使用多语言在后台中使用多语言通常用于系统提示信息、日志记录、表单验证等。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
图12-2 SOAP服务如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。......
2023-11-04
Json使用JavaScript对象语法,能够以简单的语法格式对JavaScript对象进行表示。ajaxReturn默认情况下就是返回Json格式数据,能够方便地与前台Ajax实现高效互动,如以下代码所示。Jsonp请求数据时,会在url追加cakebale回调函数,Json数据必须回应该函数,才能绕过浏览器的安全策略,实现跨域通信。在Ajax异步请求时只需要为callback传入回调标识名称,即可实现Jsonp通信。......
2023-11-04
相关推荐