Mac电脑本地使用Homebrew搭建lnmp开发环境的正确姿势~
在上一篇文章中,我们讲述了在Mac电脑本地搭建了lnmp开发环境,在本篇文章中,我们要分析一下Yii框架的项目都有哪些组成,从源码的角度来分析这个框架是如何运行的,今天这个文章是一个开头~
1:创建yii项目
在Yii的官方网站上,可以很容易的下载到Yii框架的核心代码,通过下面的代码,就可以生成一个Yii框架的项目应用,我们在Yii的同级目录下生成了一个名字叫app的项目。
// 在当前目录下,通过yiic.php创建一个名字为app的项目文件
php YiiRoot/framework/yiic.php app ./
2:项目目录
我们进入到项目目录下,在mac终端输入tree可以看到本目录下的目录文件夹,具体的目录我已经写在下面了。
|-- assets ----------------------------js文件
|-- css -------------------------- css文件
|-- images --------------------------------- 图片文件
|-- index-test.php
|-- index.php ----------------------------------- 项目入口文件
|-- protected ----------------------------- 项目核心目录
| |-- commands ----------------------------- 脚本目录
| |-- components ----------------------------- yii组件目录
| |-- config ----------------------------- 项目配置目录
| |-- controllers ----------------------------- 控制器目录
| |-- data ---------------------------- 数据资源目录
| |-- extensions ---------------------------- 第三方扩展目录
| |-- lib ---------------------------- yii框架核心文件
| |-- messages
| |-- migrations
| |-- models ------------------------------ 数据层目录
| |-- runtime ------------------------------ 项目运行日志
| |-- tests ------------------------------ 其他测试目录
| |-- vendor
| |-- views ------------------------------- 视图层日志
`-- themes ---------------------------- 主题目录
3:入口文件
在入口文件中,我把yii的核心文件放在了protected/lib下面去了,这样,我们就可以引入yii的核心文件yii.php了。
每一个项目都有一个入口文件index.php,在index.php中,引入了两个文件一个是yii.php的核心文件,一个是main.php的配置文件,引入之后通过Yii::createWebApplication创建一个应用,同时运行这个应用。
<?php
// 如果你的php版本比较高,那么需要在入口文件中增加下列两行代码,用来屏蔽一些DEPRECATED错误
error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED);
ini_set('display_errors', 'Off');
// change the following paths if necessary
$yii=dirname(__FILE__).'/protected/lib/yii/framework/yii.php';
//echo $yii;
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
//defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication($config)->run();
4:配置文件
Yii框架的配置文件在/app/protected/config中的php文件,这个目录下包括了数据库配置文件,控制台应用配置文件,在实际的项目开发中,开发者也可以自己添加配置文件
/Applications/homework/app/protected/config
|-- console.php ----- 控制台应用配置文件
|-- database.php ----- 数据库配置文件
|-- main.php ----- 核心配置文件
`-- test.php
database.php数据库配置文件
数据库配置文件返回一个数组,数组中包含连接数据库的基本信息
<?php // This is the database connection configuration. return array( /*'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',*/ // uncomment the following lines to use a MySQL database 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=localhost;dbname=test', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', );
主配置文件main.php
主配置文件同样返回一个数组,数组中有多个key,不同的key对应不同的配置项。
这些配置项都有哪是什么含义?我们会在以后的文章中讲解,这里主要看一下配置项都有哪些
<?php
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'My Web Application',
// preloading 'log' component
'preload'=>array('log'),
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
),
'modules'=>array(
// uncomment the following to enable the Gii tool
/*
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password Here',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
*/
),
// application components
'components'=>array(
'urlManager' => array(
'urlFormat' => 'path',
//'enablePrettyUrl' => false,
'showScriptName' => false,
'rules' => array(
'users' => 'users/list',
'users/create' => 'users/create',
'users/update' => 'users/update',
),
),
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
),
// uncomment the following to enable URLs in path-format
/*
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
*/
// database settings are configured in database.php
'db'=>require(dirname(__FILE__).'/database.php'),
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>YII_DEBUG ? null : 'site/error',
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
// uncomment the following to show log messages on web pages
/*
array(
'class'=>'CWebLogRoute',
),
*/
),
),
),
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
),
);
5:控制器层
控制器目录:
/Applications/homework/app/protected/controllers
|-- SiteController.php ---
`-- UsersController.php控制器类:
所有的控制器层的文件都是首字母大写,里面的类需要继承Controller类,控制器类中的动作,也就是我们经常说的方法是以action为前缀的,这个没有什么好说,这个都是yii框架自己定义的。
<?php
class SiteController extends Controller
{
public function actions(){}
public function actionIndex(){
$this->render('index');
}
}
6:组件层
组件文件地址
/Applications/homework/app/protected/components
.
|-- Controller.php
|-- UserIdentity.php
`-- UsersComponent.php
组件类
组件类首字母大写,继承基础类CCompent
<?php
class UsersComponent extends CComponent{
public static function getUserList(){
$detail = Users::getOneDetail();
$list = Users::getList();
return array(
"detail" => $detail,
"list" => $list
);
}
public static function updateUserInfo(){
$ret = Users::updateInfo();
return $ret;
}
}
7:数据层
数据层用于连接数据库,实例表对象,提供基础的查询服务
/Applications/homework/app/protected/models
|-- ContactForm.php
|-- LoginForm.php
`-- Users.php
数据类
数据类需要继承CActiveRecord类,并且需要有几个基础的方法
<?php
class Users extends CActiveRecord{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'user';
}
public function getDbConnection()
{
return Yii::app()->db;
}
public function attributeLabels()
{
return array(
'id' => 'id'
);
}
public function search()
{
}
public static function updateInfo(){
$con = self::model();
$ret = $con->updateAll(
array("name" => "mamba3"), // column
"id=1"
);
return $ret;
}
public static function getOneDetail(){
$con = self::model();
$data= $con -> find(
array(
'select' => array('id','name','nick_name'),
'order' => 'id DESC',
'condition' => 'id = 1',
)
);
$list = array();
$list[] = array(
'id' => $data->id,
'name' => $data->name,
'nick_name' => $data->nick_name,
);
return $list;
}
public static function getList(){
$con = self::model();
$data = $con -> findAll(
array(
'select' => array('id', 'name', 'nick_name'),
'order' => 'id DESC'
)
);
$list = array();
foreach($data as $item){
$list[] = array(
'id' => $item->id,
'name' => $item->name,
'nick_name' => $item->nick_name,
);
}
return $list;
}
}

支付宝打赏
微信打赏 













