推荐产品
联系我们

地址:上海市长宁区仙霞路350号10幢3楼3034室

电话:021-62378659

传真:021-62378659

邮箱:0350zp@163.com

业内新闻

使用组织ApplicationStructure:节制器Controllers

来源:博天堂ag,博天堂AG手机版,博天堂ag旗舰时间: 2020-05-23浏览次数:作者:澳门皇冠
博天堂AG手机版 控制器是MVC模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应。 具体来说,控制器从应用主体接管控制后会分析请求数据并传送到模型, 传送

  博天堂AG手机版控制器是MVC模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应。 具体来说,控制器从应用主体接管控制后会分析请求数据并传送到模型, 传送模型结果到视图,最后生成输出响应信息。

  控制器由操作组成,它是执行终端用户请求的最基础的单元, 一个控制器可有一个或多个操作。

  在操作view(定义为actionView()方法)中, 代码首先根据请求模型ID加载模型, 如果加载成功,会渲染名称为view的视图并显示,否则会抛出一个异常。

  在操作create(定义为actionCreate()方法)中, 代码相似. 先将请求数据填入模型, 然后保存模型,如果两者都成功,会跳转到ID为新创建的模型的view操作, 否则显示提供用户输入的create视图。

  如果用户的请求地址为, 会执行site控制器的index操作。 更多关于处理路由的详情请参阅路由一节。

  通常情况下,控制器用来处理请求有关的资源类型, 因此控制器ID通常为和资源有关的名词。 例如使用article作为处理文章的控制器ID。

  控制器Id可包含子目录前缀,例如admin/article代表controller namespace控制器命名空间下admin子目录中article控制器。 子目录前缀可为英文大小写字母、数字、下划线、正斜杠,其中正斜杠用来区分多级子目录(如panels/admin)。

  信息:最后一个示例admin/post-comment表示你可以将控制器放在controller namespace控制器命名空间下的子目录中, 在你不想用模块的情况下给控制器分类,这种方式很有用。

  可通过配置controller map来强制上述的控制器ID和类名对应, 通常用在使用第三方不能掌控类名的控制器上。

  创建操作可简单地在控制器类中定义所谓的操作方法来完成,操作方法必须是以action开头的公有方法。 操作方法的返回值会作为响应数据发送给终端用户, 如下代码定义了两个操作index和hello-world:

  操作通常是用来执行资源的特定操作,因此, 操作ID通常为动词,如view,update等。

  操作ID应仅包含英文小写字母、数字、下划线和中横杠,操作ID中的中横杠用来分隔单词。 例如view,update2,comment-post是真实的操作ID,view?,Update不是操作ID.

  可通过两种方式创建操作ID,内联操作和独立操作. An inline action is 内联操作在控制器类中定义为方法;独立操作是继承yii\base\Action或它的子类的类。 内联操作容易创建,在无需重用的情况下优先使用; 独立操作相反,主要用于多个控制器重用, 或重构为扩展。

  注意:操作方法的名字大小写敏感,如果方法名称为ActionIndex不会认为是操作方法, 所以请求index操作会返回一个异常, 也要注意操作方法必须是公有的, 私有或者受保护的方法不能定义成内联操作。

  因为容易创建,内联操作是最常用的操作, 但是如果你计划在不同地方重用相同的操作, 或者你想重新分配一个操作,需要考虑定义它为独立操作。

  如上所示,actions()方法返回键为操作ID、值为对应操作类名 或数组configurations的数组。 和内联操作不同,独立操作ID可包含任意字符,只要在actions()方法中申明.

  为创建一个独立操作类,需要继承yii\base\Action或它的子类,并实现公有的名称为run()的方法,run()方法的角色和操作方法类似,例如:

  操作方法或独立操作的run()方法的返回值非常重要, 它表示对应操作结果。

  在上面的例子中,操作结果都为字符串,作为响应数据发送给终端用户, 下例显示一个操作通过 返回响应对象(因为redirect()方法返回一个响应对象) 可将用户浏览器跳转到新的URL。

  内联动作的操作方法和独立动作的run()方法可以带参数,称为动作参数。 参数值从请求中获取,对于Web applications网页应用, 每个动作参数的值从$_GET中获得,参数名作为键; 对于console applications控制台应用, 动作参数对应命令行参数。

  如下例,动作view(内联动作) 申明了两个参数$id和$version。

  如果你想要一个动作参数来接受数组值,你应该使用array来提示它,如下所示:

  现在如果请求为, 参数$id会使用数组值[123], 如果请求为, 参数$id会获取相同数组值,因为无类型的123会自动转成数组。

  上述例子主要描述网页应用的操作参数,对于控制台应用, 更多详情请参阅控制台命令。

  每个控制器都有一个由yii\base\Controller::$defaultAction属性指定的默认操作, 当路由只包含控制器ID, 会使用所请求的控制器的默认操作。

  默认操作默认为index,如果想修改默认操作,只需简单地在控制器类中覆盖这个属性, 如下所示:

  处理一个请求时,应用主体会根据请求路由创建一个控制器, 控制器经过以下生命周期来完成请求:

  在设计良好的应用中,控制器很精练,包含的操作代码简短; 如果你的控制器很复杂,通常意味着需要重构, 转移一些代码到其他类中。


关于我们 简介 企业文化
联系我们

地址:上海市长宁区仙霞路350号10幢3楼3034室

电话:021-62378659

传真:021-62378659

邮箱:0350zp@163.com

扫一扫
Copyright ©  2015-2025 博天堂AG手机版  版权所有
html地图|xml地图