后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载本篇技术指南围绕 Yii 2 框架的 MVC 入门流程展开带领你在应用中创建第一个Hello页面从编写控制器内的say动作、创建对应视图到通过 URL 路由触发并理解 Yii 的请求分发机制。读完本文你将掌握动作Action、视图View、路由Route三个核心概念的完整实战用法并能在自己的 Yii 2 项目中独立复现这一最小可运行示例。从请求到响应一次完整的 MVC 最小闭环在 Yii 2 中一个 Web 请求要到达用户浏览器需要经过一条清晰的链路。本文要创建的Hello页面正好能演示这条链路的两个核心环节Web 应用接收请求并将请求分发dispatch给对应的动作Action动作依次渲染对应的视图View把Hello字样呈现给最终用户。通过本篇教程你将学到三件事如何创建动作来响应请求如何创建视图来组装响应内容应用如何把请求分发到动作上。这套流程与 Yii 2 的 MVC 架构一一对应控制器Controller负责接收与分发视图View负责输出模型Model在本示例中暂不参与——因为这里唯一用到的数据只是message参数。关于 MVC 各组成部分的完整讲解可参考结构总览。创建动作Creating an Action在 SiteController 中声明say动作动作Action是终端用户可以直接引用并触发的对象动作按控制器分组动作的执行结果就是用户最终收到的响应。本任务需要创建一个名为say的动作它从请求中读取message参数并展示给用户如果请求中没有该参数则显示默认文本SalomHello。动作必须声明在控制器中。为了简单起见我们把say动作直接加在已有的SiteController里该控制器定义在controllers/SiteController.php文件中?php namespace app\controllers; use yii\web\Controller; class SiteController extends Controller { // ...已有代码... public function actionSay($message Salom) { return $this-render(say, [message $message]); } }上面的代码中say动作被定义为SiteController类中的一个名为actionSay的方法。Yii 使用action前缀来区分控制器类中的动作方法与非动作方法action前缀之后的部分就映射为动作的 ID。Info动作Action是终端用户可以直接引用执行的对象动作按控制器Controller分组动作的执行结果即终端用户收到的响应。动作的完整定义、参数绑定与命名规则详见控制器详解。动作 ID 与动作方法名的映射规则命名动作时需要理解 Yii 对待动作 ID 的规则动作 ID 始终使用小写字母如果动作 ID 由多个单词组成单词之间用连字符-连接例如create-comment动作 ID 映射到方法名时去掉 ID 中的连字符 → 每个单词首字母大写 → 加上action前缀。例如动作 IDcreate-comment对应方法名actionCreateComment。这一转换逻辑在源码中有精确实现framework/base/Controller.php#L262-L268 使用正则/^(?:[a-z0-9_]-)*[a-z0-9_]$/校验 ID 合法性然后通过action . str_replace( , , ucwords(str_replace(-, , $id)))生成方法名最后用反射确认方法是 public 且名字完全一致才包装成InlineAction返回。动作参数如何从请求中自动填充示例中的动作方法接收参数$message其默认值为Salom——这和你在 PHP 中给任何函数或方法参数设置默认值的方式完全一致。当应用收到请求并判定由say动作处理时会按参数名从请求中取出同名参数填充进去。换句话说如果请求里带有messageGoodbye那么动作内的$message变量就会被赋值为Goodbye。从源码看这一参数绑定机制由 framework/web/Controller.php#L133-L194 的bindActionParams()完成它通过ReflectionMethod反射出动作方法的形参列表逐一在请求参数中按名字查找找到就做类型校验后填入找不到但形参有默认值则使用默认值两者都没有则抛出BadRequestHttpExceptionMissing required parameters。测试用例 tests/framework/web/ControllerTest.php#L58-L71 专门验证了同名参数被正确绑定、缺失参数回退到默认值的行为。用 render() 渲染视图在动作方法内部调用了 [[yii\web\Controller::render()|render()]] 来渲染名为say的视图文件并把message参数传给视图使用。渲染结果由动作方法return返回应用收到后会把结果作为完整 HTML 页面的一部分展示给浏览器中的用户。render()的源码位于 framework/base/Controller.php#L422-L426其工作分两步public function render($view, $params []) { $content $this-getView()-render($view, $params, $this); return $this-renderContent($content); }先通过View组件渲染视图得到内容片段再调用renderContent()把内容嵌入布局Layout中。布局的查找规则也定义在同一个类中默认在views/layouts/main.php查找布局文件。想跳过布局只渲染视图片段可以使用renderPartial()见 framework/base/Controller.php#L453-L456。创建视图Creating a View编写say视图文件视图View是你编写的、用来生成响应内容的脚本。本任务需要创建一个say视图它负责打印从动作方法接收到的message参数?php use yii\helpers\Html; ? ? Html::encode($message) ?say视图应保存在views/site/say.php文件中。当动作中调用 [[yii\web\Controller::render()|render()]] 时框架会按views/ControllerID/ViewName.php的路径规则查找对应的 PHP 文件——即views/目录下以控制器 ID 命名的子目录再加视图名与.php后缀。为什么必须对输出做 HTML 编码注意上面代码中message在输出前经过了 [[yii\helpers\Html::encode()|HTML 编码]]。这一步是必须的因为该参数来自终端用户输入如果不做过滤攻击者可以在参数中嵌入恶意 JavaScript 代码发动跨站脚本XSS攻击。Html::encode()的实现见 framework/helpers/BaseHtml.php#L117-L120本质是调用 PHP 内置的htmlspecialchars()按应用配置的字符集默认UTF-8把、、、、等特殊字符转义为 HTML 实体从而让用户输入只被当作纯文本渲染不会作为脚本执行。视图与渲染机制的进一步讲解可参考视图详解。视图本质上是 PHP 脚本当然你可以在say视图中放入更多内容包括 HTML 标签、纯文本甚至 PHP 语句。事实上say视图就是一个由 [[yii\web\Controller::render()|render()]] 执行的普通 PHP 脚本脚本打印出的内容会被作为响应结果返回给应用再由应用输出给终端用户。视图文件定位的底层实现在 framework/base/View.php#L154-L158 的View::render()先按视图名解析出文件路径再交给renderFile()执行。动手验证Trying It Out访问新页面创建好动作和视图之后通过下面的 URL 即可访问新页面https://hostname/index.php?rsite%2FsaymessageSalomdunyo页面会显示Salom dunyoHello World文本并且与站内其他页面共用相同的头部Header和底部Footer。如果在 URL 中省略message参数页面则只显示Salom。这是因为message是传给actionSay()方法的参数省略时其默认值Salom会被自动使用——这正是bindActionParams()中缺失参数回退到默认值分支的直观体现。Info新页面与其他页面共用相同的头部和底部是因为 [[yii\web\Controller::render()|render()]] 方法会自动把say视图的渲染结果嵌入到所谓的布局Layout中本例的布局文件位于views/layouts/main.php。布局相关的机制详见视图详解中的布局小节。认识路由参数r上面的 URL 中参数r需要进一步解释。它代表路由Route是应用中指向某个动作的全局限一标识格式为ControllerID/ActionID。当应用收到请求时会按下面的流程处理对应源码调用链framework/web/Application.php#L81-L86 的handleRequest()调用$request-resolve()解析路由framework/web/Request.php#L316-L326 的resolve()转交UrlManager::parseRequest()解析出route与paramsr参数即在此阶段被读取路由中的ControllerID部分决定实例化哪个控制器类控制器再用ActionID部分决定实例化哪个动作framework/base/Controller.php#L251-L273 的createAction()最终由 framework/base/Controller.php#L150-L199 的runAction()执行动作内部再经由InlineAction::runWithParams()framework/base/InlineAction.php#L53-L62完成参数绑定并调用方法。在本例中路由site/say会被解析为SiteController控制器类中的say动作最终调用SiteController::actionSay()方法处理请求。路由的完整机制参见路由与分发详解。控制器的 ID 命名规则和动作一样控制器在应用中也拥有唯一标识自己的 ID。控制器 ID 的命名规则与动作 ID 相同控制器类名由控制器 ID 派生而来——去掉 ID 中的连字符、每个单词首字母大写、末尾追加Controller后缀。例如控制器 IDpost-comment对应控制器类名PostCommentController。Info这些 ID 规则贯穿整个 Yii 2 框架无论控制器还是动作ID 始终小写、多词用连字符连接类名/方法名则按去连字符 单词首字母大写 前后缀的规则生成从而保证 URL 路由与 PHP 类、方法之间可以双向无损映射。小结Summary在本节中你接触到了 MVC 架构模式中的控制器和视图两个部分在控制器中创建了一个动作来处理特定请求创建了一个视图来组装响应内容这个简单示例中没有涉及模型Model因为唯一使用的数据只是message参数。同时你也认识了 Yii 的路由Route体系——它是连接用户请求与控制器动作之间的桥梁是框架分发机制中至关重要的一环。在下一节中你将学习如何创建模型Model并添加一个包含 HTML 表单的新页面进一步体会 MVC 三要素的完整协作。延伸阅读控制器Controller与动作Action详解动作声明、ID 命名、参数绑定与请求生命周期视图View详解视图文件、布局Layout与渲染机制路由与 URL 生成r参数的解析过程与美化 URL 配置入门指南第一个应用本地环境搭建与骨架应用初始化源码参考framework/base/Controller.php、framework/web/Controller.php、framework/base/View.php、framework/helpers/BaseHtml.php测试参考tests/framework/web/ControllerTest.php 中的testBindActionParams()验证了动作参数绑定的行为赞分享后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载相关推荐Yii 2 入门实战从零创建第一个 Hello World 页面Action、View 与路由全解析Yii 2 入门实战从零创建第一个 Hello World 页面Action、View 与路由全解析 本篇指南带你以最经典的 Hello World后端Web框架Yii 2 实战入门构建你的第一个 Hello World 页面Action、View 与路由全解析Yii 2 实战入门构建你的第一个 Hello World 页面Action、View 与路由全解析 本篇技术指南以 Yii 2 官方西班牙语入门教程后端Web框架Yii 2 入门实战用 Action 与 View 从零创建 Hello 页面Yii 2 入门实战用 Action 与 View 从零创建 Hello 页面 本篇指南以 Yii 2 官方入门教程《Katakan Hello》为主线后端Web框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
GAF框架组件扩展开发实战:从模块搭建到避坑指南 1. 为什么组件扩展能力是 GAF 框架的核心命脉做过中后台系统的人都有一个共同体会:业务需求永远比框架跑得快。今天要加一个审批流节点,明天要接一个第三方数据源,后天又要给某个列表页塞一个自定义的统计卡片。如果每次这种需求都要改框架源… · 2026/9/23 12:28:43
wired-elements 手绘风格多行文本框组件 wired-textarea 完整使用指南 UI组件前端 【免费下载链接】wired-elements Collection of custom elements that appear hand drawn. Great for wireframes or a fun look. 项目地址: https://gitcode.com/gh_mirrors/wi/wired-elements 点击查看 免费下载 本指南围绕 wired-elements 项目中 wi… · 2026/9/23 12:28:43
半导体存储器物理特性与工程实践指南 简介:本资源为高校《数字电子技术》或《计算机组成原理》课程核心章节课件,聚焦半导体存储器原理与应用,面向电子、计算机及相关专业本科生及硬件初学者。内容系统覆盖ROM与RAM两大类器件:从掩模ROM、PROM、EPROM到快闪存储器的编… · 2026/9/23 12:28:43
3个核心逻辑拆解致加西亚的一封信面试必问 3个核心逻辑拆解致加西亚的一封信面试必问 刚拿到 Offer 的应届生最容易在技术二面卡住,不是因为代码写不出,而是面对面试官抛出的 java.lang.NullPointerException 或者 Python 的… · 2026/9/23 14:33:57
OpenClaw命令行工具实战指南与高效运维技巧 1. OpenClaw工具概述OpenClaw作为一款开源的命令行工具集,主要面向开发者和系统管理员提供高效的自动化操作能力。这个工具包最初由某技术团队在2018年发布,经过多年迭代已经形成了包含文件处理、系统监控、网络调试等六大模块的完整生态。不同于其他命令… · 2026/9/23 14:33:57
MATLAB遗传算法实现多机器人任务分配 简介:本资源是一份面向机器人系统开发工程师与智能优化研究者的MATLAB实践项目,聚焦遗传算法在多机器人任务分配中的建模、实现与性能评估,适用于工业自动化、物流调度及协同侦察等实际场景。压缩包共590个文件,主体为482个MATLAB… · 2026/9/23 14:33:57
千笔论文辅助工具:智能写作与文献管理全解析 1. 工具定位与核心价值解析作为一名经历过研究生阶段的科研工作者,我深知论文写作过程中的痛点:文献管理混乱、格式调整耗时、语言表达不专业、查重降重效率低下。千笔这款工具正是针对这些痛点设计的全流程论文辅助系统,它不同于简单的语法检… · 2026/9/23 14:33:57
C语言五子棋课程设计源码:可编译运行的ANSI C工程实践 简介:本资源是一份面向高校C语言初学者的课程设计实践项目,聚焦五子棋游戏开发,帮助学生通过完整可运行的代码掌握控制流程、二维数组应用、胜负判定算法及基础I/O交互等核心编程能力。压缩包共3个文件(29KB)ÿ… · 2026/9/23 14:33:57
Java图书管理系统:MySQL事务+Swing GUI实战指南 简介:本资源是一套完整的Java课程设计级图书管理系统实现方案,面向计算机专业本科生及Java初学者,解决图书馆基础业务管理需求,涵盖管理员登录、图书增删改查、用户信息管理、借阅归还全流程等核心功能。压缩包共187个文件&#x… · 2026/9/23 14:33:51
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29