加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

Yii快速入门经典教程

发布时间:2020-05-23 17:36:23 所属栏目:PHP 来源:互联网
导读:这篇文章主要介绍了Yii快速入门经典教程,结合实例形式较为详细的分析了Yii开发的基本概念,原理,使用技巧与相关注意事项,需要的朋友可以参考下

本文讲述了Yii快速入门教程。分享给大家供大家参考,具体如下:

Ⅰ、基本概念

入口文件内容:一般格式如下:

run();//根据主配置文件建立应用实例,并运行。你可以在当前应用的任何位置通过Yii::app()来访问这个实例。

保存位置:你的应用/protected/config/main.php

文件内容:一般格式如下:

dirname(__FILE__).DIRECTORY_SEPARATOR.'..',//当前应用根目录的绝对物理路径 'name'=>'Yii Blog Demo',//当前应用的名称 // 预载入log(记录)应用组件,这表示该应用组件无论它们是否被访问都要被创建。该应用的参数配置在下面以“components”为关键字的数组中设置。 'preload'=>array('log'),//log为组件ID // 自动载入的模型和组件类 'import'=>array( 'application.models.*',//载入“application/models/”文件夹下的所有模型类 'application.components.*',//载入“application/components/”文件夹下的所有应用组件类 ),'defaultController'=>'post',//设置默认控制器类 // 当前应用的组件配置。更多可供配置的组件详见下面的“核心应用组件” 'components'=>array( 'user'=>array( //user(用户)组件配置,“user”为组件ID // 可以使用基于cookie的认证 'allowAutoLogin'=>true,//允许自动登录 ),'cache'=>array( //缓存组件 'class'=>'CMemCache',//缓存组件类 'servers'=>array( //MemCache缓存服务器配置 array('host'=>'server1','port'=>11211,'weight'=>60),//缓存服务器1 array('host'=>'server2','weight'=>40),//缓存服务器2 ),),'db'=>array( //db(数据库)组件配置,“db”为组件ID 'connectionString' => 'sqlite:protected/data/blog.db',//连接数据库的DSN字符串 'tablePrefix' => 'tbl_',//数据表前缀 ),// 如果要使用一个MySQL数据库,请取消下面的注释 'errorHandler'=>array( // 使用SiteController控制器类中的actionError方法显示错误 'errorAction'=>'site/error',//遇到错误时,运行的操作。控制器名和方法名均小写,并用斜线“/”隔开 ),//URL路由管理器 'urlManager'=>array( 'urlFormat'=>'path',//URL格式。共支持两种格式:'path'格式(如:/path/to/EntryScript.php/name1/value1/name2 /value2...)和'get'格式(如: /path/to/EntryScript.php?name1=value1&name2=value2...)。当使用'path'格式时,需要设置如下的规则: 'rules'=>array( //URL规则。语法:<参数名:正则表达式> 'post//'=>'post/view',//将post/12/helloword指向post/view?id=12&title=helloword 'posts/'=>'post/index',//将posts/hahahaha指向post/index?tag=hahahaha '/'=>'/','log'=>array( //记录 'class'=>'CLogRouter',//处理记录信息的类 'routes'=>array( array( 'class'=>'CFileLogRoute',//处理错误信息的类 'levels'=>'error,warning',//错误等级 ),// 如要将错误记录消息在网页上显示,取消下面的注释即可 ),//应用组件配置结束 // 使用Yii::app()->params['参数名']可以访问应用层的参数 'params'=>require(dirname(__FILE__).'/params.php'),);

核心应用组件:

Yii 预定义了一系列核心应用组件,提供常见 Web 应用中所用的功能。例如, request 组件用于解析用户请求并提供例如 URL,cookie 等信息。通过配置这些核心组件的属性,我们可以几乎任意的修改Yii 的默认行为。

下面我们列出了由 CWebApplication 预定义的核心组件。

assetManager: CAssetManager - 管理私有资源文件的发布。 authManager: CAuthManager - 管理基于角色的访问控制 (RBAC). cache: CCache - 提供数据缓存功能。注意,你必须指定实际的类(例如CMemCache,CDbCache)。否则,当你访问此组件时将返回 NULL。 clientScript: CClientScript - 管理客户端脚本 (javascripts 和 CSS). coreMessages: CPhpMessageSource - 提供 Yii 框架用到的核心信息的翻译。 db: CDbConnection - 提供数据库连接。注意,使用此组件你必须配置其 connectionString 属性。 errorHandler: CErrorHandler - 处理未捕获的 PHP 错误和异常。 format: CFormatter - 格式化数值显示。此功能从版本 1.1.0 起开始提供。 messages: CPhpMessageSource - 提供Yii应用中使用的信息翻译。 request: CHttpRequest - 提供关于用户请求的信息。 securityManager: CSecurityManager - 提供安全相关的服务,例如散列,加密。 session: CHttpSession - 提供session相关的功能。 statePersister: CStatePersister - 提供全局状态持久方法。 urlManager: CUrlManager - 提供 URL 解析和创建相关功能 user: CWebUser - 提供当前用户的识别信息。 themeManager: CThemeManager - 管理主题。

要访问一个应用组件,使用 Yii::app()->组件的ID

控制器 是 CController 类的子类的实例。它在当用户请求时由应用创建。当一个控制器运行时,它执行所请求的动作(控制器类方法),动作通常会引入所必要的模型并渲染相应的视图。动作,就是一个名字以 action 开头的控制器类方法(action+大写首字母的动作名)。

控制器类文件保存位置protected/controllers/

控制器和动作以 ID 识别。

控制器ID 是一种 '父目录/子目录/控制器名' 的格式,对应相应的控制器类文件 protected/controllers/父目录/子目录/大写首字母的控制器名Controller.php;

动作ID 是除去 action 前缀的动作方法名。

1、路由

用户以路由的形式请求特定的控制器和动作。路由是由控制器 ID 和动作 ID 连接起来的,两者以斜线分割。

例如,路由 post/edit 代表 PostController 及其 edit 动作。默认情况下,URL http://hostname/index.php?r=post/edit 即请求此控制器和动作。

注意: 默认情况下,路由是大小写敏感的。可以通过设置应用配置中的 CUrlManager::caseSensitive 为 false 使路由对大小写不敏感。当在大小写不敏感模式中时, 要确保你遵循了相应的规则约定,即:包含控制器类文件的目录名小写,且 控制器映射 和动作映射 中使用的键为小写。

路由的格式:控制器ID/动作ID 或 模块ID/控制器ID/动作ID(如果是嵌套模块,模块ID 就是父模块ID/子模块ID)

2、控制器实例化

应用将使用如下规则确定控制器的类以及类文件的位置:

① 、如果指定了 CWebApplication::catchAllRequest,控制器将基于此属性创建,而用户指定的控制器 ID 将被忽略。这通常用于将应用设置为维护状态并显示一个静态提示页面。

② 、如果在 CWebApplication::controllerMap 中找到了 ID,相应的控制器配置将被用于创建控制器实例。

③ 、如果 ID 为 'path/to/xyz'的格式,控制器类的名字将判断为 XyzController,相应的类文件则为 protected/controllers/path/to/XyzController.php。如果类文件不存在,将触发一个 404 CHttpException 异常。

在使用了模块的情况下,应用将检查此 ID 是否代表一个模块中的控制器。如果是的话,模块实例将被首先创建,然后创建模块中的控制器实例。

3、动作(action)

动作 就是被定义为一个以 action 单词作为前缀命名的方法。而更高级的方式是定义一个动作类并让控制器在收到请求时将其实例化。这使得动作可以被复用,提高了可复用度。

1、定义一个动作类,基本格式如下:

2、使用动作类:为了让控制器注意到这个动作,我们要用如下方式覆盖控制器类的actions() 方法:

'application.controllers.post.UpdateAction',//使用“应用程序文件夹/controllers/post/UpdateAction.php”文件中的类来处理edit动作 ); } }

如上所示,我们使用了路径别名“application.controllers.post.UpdateAction”指定动作类文件为“protected/controllers/post/UpdateAction.php”。

通过编写基于类的动作,我们可以将应用组织为模块的风格。例如,如下目录结构可用于组织控制器相关代码:

protected/ controllers/ PostController.php UserController.php post/ CreateAction.php ReadAction.php UpdateAction.php user/ CreateAction.php ListAction.php ProfileAction.php UpdateAction.php

4、过滤器(filter)

过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。

一个动作可以有多个过滤器。如有多个过滤器,则按照它们出现在过滤器列表中的顺序依次执行。过滤器可以阻止动作及后面其他过滤器的执行。

过滤器可以定义为一个控制器类的方法。过滤器方法名必须以 filter 开头。例如,现有的 filterAccessControl 方法定义了一个名为 accessControl 的过滤器。过滤器方法必须为如下结构:

run() 以继续后续过滤器与动作的执行。 }

$filterChain (过滤器链)是一个 CFilterChain 的实例,代表与所请求动作相关的过滤器列表。在过滤器方法中,我们可以调用 $filterChain->run() 以继续执行后续过滤器和动作。

如 动作 一样,过滤器也可以是一个对象,它是 CFilter 或其子类的实例。如下代码定义了一个新的过滤器类:

要对动作应用过滤器,我们需要覆盖 CController::filters() 方法。此方法应返回一个过滤器配置数组。例如:

'second',//初始化过滤器对象中的unit属性值为second ),); } }

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读