Yii学习总结之安装配置


Posted in PHP onFebruary 22, 2015

之前写过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应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。

安装Yii

在安装Yii之前,你必须配置好你的开发环境,如一台支持PHP5.1.0以上版本的Web服务器。Yii已经在Windows和Linux操作系统上的 Apache Web服务器测试通过。它可能也会运行在其他平台上的支持PHP5的Web服务器,互联网上公布了很多免费资源,你可能会获得一个配置好PHP5的Web 服务器环境。在这里我们会抛开Web服务器和PHP5的安装。
Yii的安装其实非常简单,实际只需要两个步骤:
从 http://www.yiiframework.com/ 下载Yii框架 解压下载文件到Web服务器可访问的目录下。
安装完成后,建议你检查一下当前服务器是否已经满足了Yii的所有要求。
幸运的是,这样做很容易,Yii自带了一个简单的检查工具。要调用它,在你的浏览器地址栏中输入:http://yourhostname/path/to/yii/requirements/index.php,下面将显示你服务器的配置。使用检查工具,确定服务器没有安装和使用扩展或组件,但它只是给出一个建议,以确保可以确定安装。正如你看到的,下在的检查结果,并非都是 Passed(通过)状态,也有部份显示Warning(警告)。当然,你的配置情况可能会略有不同,因此,你的显示结果也会有所不同。其实下面的细节部份没有必要全部能通过。但部份也是必要的,根据 Conclusion(结论)这个段落的内容:你的服务器配置满足了Yii的最低要求。(Your server configuration satisfies the minimum requirements by Yii.)

创建一个新的应用程序
Yii的安装位置是你已经知道的
WebRoot是你的Web服务器配置的根目录
从你的命令行,进入到framework目录,并执行以下内容:

  % cd Webroot/testdrive/framework

  % yiic webapp ../../testdrive

  Create a Web application under '/WebRoot/testdrive'? [Yes|No]

  Yes

         mkdir /WebRoot/testdrive

         mkdir /WebRoot/testdrive/assets

         mkdir /WebRoot/testdrive/css

         generate css/bg.gif

         generate css/form.css

         generate css/main.css

你的应用已经成功创建到了/WebRoot/demo下。这个webapp命令的作用是创建一个全新的Yii应用。它只需要指定一个参数,无论是绝对还是相对路径都会创建应用程序。它所生成的目录及文件只是应用程序的一个骨架。

testdrive/

   index.php                 Web 应用入口脚本文件

   index-test.php            功能测试使用的入口脚本文件

   assets/                   包含公开的资源文件

   css/                      包含 CSS 文件

   images/                   包含图片文件

   themes/                   包含应用主题

   protected/                包含受保护的应用文件

      yiic                   yiic 命令行脚本

      yiic.bat               Windows 下的 yiic 命令行脚本

      yiic.php               yiic 命令行 PHP 脚本

      commands/              包含自定义的 'yiic' 命令

         shell/              包含自定义的 'yiic shell' 命令

      components/            包含可重用的用户组件

         Controller.php      所有控制器类的基础类

         Identity.php        用来认证的 'Identity' 类

      config/                包含配置文件

         console.php         控制台应用配置

         main.php            Web 应用配置

         test.php            功能测试使用的配置

      controllers/           包含控制器的类文件

         SiteController.php  默认控制器的类文件

      data/                  包含示例数据库

         schema.mysql.sql    示例 MySQL 数据库

         schema.sqlite.sql   示例 SQLite 数据库

         testdrive.db        示例 SQLite 数据库文件

      extensions/            包含第三方扩展

      messages/              包含翻译过的消息

      models/                包含模型的类文件

         LoginForm.php       'login' 动作的表单模型

         ContactForm.php     'contact' 动作的表单模型

      runtime/               包含临时生成的文件

      tests/                 包含测试脚本

      views/                 包含控制器的视图和布局文件

         layouts/            包含布局视图文件

            main.php         所有视图的默认布局

            column1.php      使用单列页面使用的布局

            column2.php      使用双列的页面使用的布局

         site/               包含 'site' 控制器的视图文件

            pages/           包含 "静态" 页面

               about.php     "about" 页面的视图

            contact.php      'contact' 动作的视图

            error.php        'error' 动作的视图(显示外部错误)

            index.php        'index' 动作的视图

            login.php        'login' 动作的视图

         system/             包含系统视图文件

这时不用写一行代码,我们就可以在浏览器中访问如下 URL 来看看我们第一个 Yii 应用:

http://hostname/testdrive/index.php
 
我们会看到的,这个应用包含三个页面:首页、联系页、登录页。首页展示一些关于应用和用户登录状态的信息,联系页显示一个联系表单以便用户填写并提交他们的咨询,登录页允许用户先通过认证然后访问已授权的内容。

配置

在这个应用中,不管到那个页面url中都带有index.php,如果想把它去掉,怎么办。

1. 开启apache的mod_rewrite模块,去掉LoadModule rewrite_module modules/mod_rewrite.so前的"#"符号,确保<Directory "..."></Directory>中有"AllowOverride All"。
2. 在项目中的/protected/config/main.php中添加代码:

'components'=>array(

           ...

           'urlManager'=>array(

                 'urlFormat'=>'path',

                 'showScriptName'=>false,//注意false不要用引号括上

                 'rules'=>array(

                     'sites'=>'site/index',

                 ),

           ),

           ...

       ),

3.配置服务器,Yii可以在Apache和Nginx下配置

1)Apache

在Apache服务器下,Yii需要配置.htaccess文件。配置如下

RewriteEngine on

# prevent httpd from serving dotfiles (.htaccess, .svn, .git, etc.)

RedirectMatch 403 /\..*$

# if a directory or a file exists, use it directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php

RewriteRule . index.php

 2)Nginx

Yii可以使用Nginx和PHP的FPM SAPI。配置如下

server {

    set $host_path "/www/mysite";

    access_log  /www/mysite/log/access.log  main;

    server_name  mysite;

    root   $host_path/htdocs;

    set $yii_bootstrap "index.php";

    charset utf-8;

    location / {

        index  index.html $yii_bootstrap;

        try_files $uri $uri/ /$yii_bootstrap?$args;

    }

    location ~ ^/(protected|framework|themes/\w+/views) {

        deny  all;

    }

    #avoid processing of calls to unexisting static files by yii

    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {

        try_files $uri =404;

    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #

    location ~ \.php {

        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #let yii catch the calls to unexising PHP files

        set $fsn /$yii_bootstrap;

        if (-f $document_root$fastcgi_script_name){

            set $fsn $fastcgi_script_name;

        }

        fastcgi_pass   127.0.0.1:9000;

        include fastcgi_params;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

        #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for 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 ~ /\. {

        deny all;

        access_log off;

        log_not_found off;

    }

}

 使用如上配置,你可以在php.ini中设置cgi.fix_pathinfo=0,这样可以避免许多不必要的系统的stat()调用。

基本安装和配置就到这里~~

PHP 相关文章推荐
解析php中heredoc的使用方法
Jun 17 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
php中使用url传递数组的方法
Feb 11 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
php数组随机排序实现方法
Jun 13 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP单态模式简单用法示例
Nov 16 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 #PHP
十幅图告诉你什么是PHP引用
Feb 22 #PHP
PHP的引用详解
Feb 22 #PHP
PHP实现加密的几种方式介绍
Feb 22 #PHP
php使用parse_url和parse_str解析URL
Feb 22 #PHP
php的闭包(Closure)匿名函数详解
Feb 22 #PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 #PHP
You might like
一个PHP的ZIP压缩类分享
2014/05/04 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
对python中return和print的一些理解
2017/08/18 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
经贸日语毕业生自荐信
2013/11/03 职场文书
优秀教师工作感言
2014/02/16 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
消防安全承诺书
2014/05/22 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
运动会加油稿30字
2015/07/21 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
Python 数据可视化之Seaborn详解
2021/11/02 Python