之前在sina博客写过Yii的文章,来到博客园之后,没再写过关于Yii的文章,正好端午假期没啥事,就结合以前的博客,Yii的官方文档,再加上最近的关于Yii的收获总结一下,写个系列~~
Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
%<span> cd Webroot/testdrive/framework </span>% <span>yiic webapp ../../testdrive Create a Web application under </span><span>'</span><span>/WebRoot/testdrive</span><span>'</span>? [Yes|<span>No] Yes </span><span>mkdir</span> /WebRoot/<span>testdrive </span><span>mkdir</span> /WebRoot/testdrive/<span>assets </span><span>mkdir</span> /WebRoot/testdrive/<span>css generate css</span>/<span>bg.gif generate css</span>/<span>form.css generate css</span>/main.css
你的应用已经成功创建到了/WebRoot/demo下。这个webapp命令的作用是创建一个全新的Yii应用。它只需要指定一个参数,无论是绝对还是相对路径都会创建应用程序。它所生成的目录及文件只是应用程序的一个骨架。
testdrive/<span> index.php Web 应用入口脚本文件 index</span>-<span>test.php 功能测试使用的入口脚本文件 assets</span>/<span> 包含公开的资源文件 css</span>/<span> 包含 CSS 文件 images</span>/<span> 包含图片文件 themes</span>/<span> 包含应用主题 protected</span>/<span> 包含受保护的应用文件 yiic yiic 命令行脚本 yiic.bat Windows 下的 yiic 命令行脚本 yiic.php yiic 命令行 PHP 脚本 commands</span>/ 包含自定义的 <span>'</span><span>yiic</span><span>'</span><span> 命令 shell</span>/ 包含自定义的 <span>'</span><span>yiic shell</span><span>'</span><span> 命令 components</span>/<span> 包含可重用的用户组件 Controller.php 所有控制器类的基础类 Identity.php 用来认证的 </span><span>'</span><span>Identity</span><span>'</span><span> 类 config</span>/<span> 包含配置文件 console.php 控制台应用配置 main.php Web 应用配置 test.php 功能测试使用的配置 controllers</span>/<span> 包含控制器的类文件 SiteController.php 默认控制器的类文件 data</span>/<span> 包含示例数据库 schema.mysql.sql 示例 MySQL 数据库 schema.sqlite.sql 示例 SQLite 数据库 testdrive.db 示例 SQLite 数据库文件 extensions</span>/<span> 包含第三方扩展 messages</span>/<span> 包含翻译过的消息 models</span>/<span> 包含模型的类文件 LoginForm.php </span><span>'</span><span>login</span><span>'</span><span> 动作的表单模型 ContactForm.php </span><span>'</span><span>contact</span><span>'</span><span> 动作的表单模型 runtime</span>/<span> 包含临时生成的文件 tests</span>/<span> 包含测试脚本 views</span>/<span> 包含控制器的视图和布局文件 layouts</span>/<span> 包含布局视图文件 main.php 所有视图的默认布局 column1.php 使用单列页面使用的布局 column2.php 使用双列的页面使用的布局 site</span>/ 包含 <span>'</span><span>site</span><span>'</span><span> 控制器的视图文件 pages</span>/ 包含 <span>"</span><span>静态</span><span>"</span><span> 页面 about.php </span><span>"</span><span>about</span><span>"</span><span> 页面的视图 contact.php </span><span>'</span><span>contact</span><span>'</span><span> 动作的视图 error.php </span><span>'</span><span>error</span><span>'</span><span> 动作的视图(显示外部错误) index.php </span><span>'</span><span>index</span><span>'</span><span> 动作的视图 </span><span>login</span>.php <span>'</span><span>login</span><span>'</span><span> 动作的视图 system</span>/ 包含系统视图文件
这时不用写一行代码,我们就可以在浏览器中访问如下 URL 来看看我们第一个 Yii 应用:
http:<span>//</span><span>hostname/testdrive/index.php</span>
我们会看到的,这个应用包含三个页面:首页、联系页、登录页。首页展示一些关于应用和用户登录状态的信息,联系页显示一个联系表单以便用户填写并提交他们的咨询,登录页允许用户先通过认证然后访问已授权的内容。
在这个应用中,不管到那个页面url中都带有index.php,如果想把它去掉,怎么办。
1. 开启apache的mod_rewrite模块,去掉LoadModule rewrite_module modules/mod_rewrite.so前的"#"符号,确保'components'=><span>array</span><span>( </span>... 'urlManager'=><span>array</span><span>( </span>'urlFormat'=>'path', 'showScriptName'=><span>false</span>,<span>//</span><span>注意false不要用引号括上</span> 'rules'=><span>array</span><span>( </span>'sites'=>'site/index',<span> )</span>,<span> )</span>, ...<span> )</span>,
3.配置服务器,Yii可以在Apache和Nginx下配置
1)Apache
在Apache服务器下,Yii需要配置.htaccess文件。配置如下
<span>RewriteEngine on # prevent httpd from serving dotfiles (.htaccess, .svn, .git, etc.) RedirectMatch </span><span>403</span> /\..*<span>$ # </span><span>if</span> a directory or a <span>file</span><span> exists, use it directly RewriteCond </span>%{REQUEST_FILENAME} !-<span>f RewriteCond </span>%{REQUEST_FILENAME} !-<span>d # otherwise forward it to index.php RewriteRule . index.php</span>
2)Nginx
Yii可以使用Nginx和PHP的FPM SAPI。配置如下
<span>server { set $host_path </span><span>"</span><span>/www/mysite</span><span>"</span><span>; access_log </span>/www/mysite/log/<span>access.log main; server_name mysite; root $host_path</span>/<span>htdocs; set $yii_bootstrap </span><span>"</span><span>index.php</span><span>"</span><span>; charset utf</span>-<span>8</span><span>; location </span>/<span> { index index.html $yii_bootstrap; try_files $uri $uri</span>/ /$yii_bootstrap?<span>$args; } location </span>~ ^/(protected|framework|themes/\<span>w</span>+/<span>views) { deny all; } #avoid processing of calls to unexisting static files by yii location </span>~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|<span>zip</span>|<span>rar)$ { try_files $uri </span>=<span>404</span><span>; } # pass the PHP scripts to FastCGI server listening on </span><span>127.0</span>.<span>0.1</span>:<span>9000</span><span> # location </span>~<span> \.php { fastcgi_split_path_info </span>^(.+\.php)(.*<span>)$; #let yii catch the calls to unexising PHP files set $fsn </span>/<span>$yii_bootstrap; </span><span>if</span> (-<span>f $document_root$fastcgi_script_name){ set $fsn $fastcgi_script_name; } fastcgi_pass </span><span>127.0</span>.<span>0.1</span>:<span>9000</span><span>; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fsn; #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC </span><span>3875</span> specifies them <span>for</span><span> CGI fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fsn; } # prevent nginx from serving dotfiles (.htaccess, .svn, .git, etc.) location </span>~ /<span>\. { deny all; access_log off; log_not_found off; } }</span>
使用如上配置,你可以在php.ini中设置cgi.fix_pathinfo=0,这样可以避免许多不必要的系统的stat()调用。
基本安装和配置就到这里~~