ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

将 Yii 2 用作微框架:不依赖应用模板,从零构建 JSON API 实战指南

将 Yii 2 用作微框架:不依赖应用模板,从零构建 JSON API 实战指南 后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载Yii 2 不仅是一个功能完整的全栈框架其核心本身就是一个可独立运作的微框架你完全可以不依赖basic/advanced应用模板仅用几个文件就搭建出符合自己需求的轻量应用。本文基于官方指南《Using Yii as a Micro-framework》仓库对应文档为 docs/guide-pl/tutorial-yii-as-micro-framework.md 与 docs/guide/tutorial-yii-as-micro-framework.md完整演示从 Composer 安装、手写入口脚本与配置、创建控制器到用 ActiveRecord 与 ActiveController 构建 REST API 的全过程并深入仓库源码揭示--appconfig、yii serve、REST 行为绑定等底层机制。读完后你将掌握不依赖模板自主组装 Yii 2 应用以及用最少代码交付 JSON API 的完整技能。Yii 本身就是微框架很多开发者误以为必须使用basic或advanced应用模板才能开发 Yii 项目。事实上模板只是官方提供的「脚手架」并非框架运行的前提——Yii 2 内核本身就具备微框架的全部能力请求分发、路由、依赖注入容器、事件、行为、数据库抽象层等组件全部位于 framework/ 目录中由 framework/Yii.php 与 framework/BaseYii.php 提供。当你不需要模板自带的资产注册assets、视图布局views等预置代码时——例如构建纯 JSON API——直接跳过模板反而更清爽。目录结构完全由你决定只要遵守 PHP 命名空间与 Composer 自动加载规则即可。安装 Yii最小化 Composer 配置首先为项目创建目录并进入其中示例命令基于 Unix 语法Windows 下也有对应命令mkdir micro-app cd micro-app继续前需要具备基本的 Composer 使用知识。在micro-app目录下创建composer.json{ require: { yiisoft/yii2: ~2.0.0 }, repositories: [ { type: composer, url: https://asset-packagist.org } ] }保存后运行composer install这将安装 Yii 2 框架及其全部依赖。asset-packagist.org仓库用于解析 jQuery 等 Bower 资产的 Composer 包——即使本示例不使用资产保留它也能保证依赖解析的完整性。安装完成后vendor/目录中会出现框架本体vendor/yiisoft/yii2/与 Composer 生成的自动加载器vendor/autoload.php。创建项目结构入口脚本与独立配置框架安装好后下一步是创建应用的入口脚本。入口脚本是应用启动时第一个被执行的文件出于安全考虑官方推荐把它放在独立的web目录中并将其设为 Web 根目录。创建web目录并在其中放入index.php?php // 部署到生产环境时请注释下面两行 defined(YII_DEBUG) or define(YII_DEBUG, true); defined(YII_ENV) or define(YII_ENV, dev); require(__DIR__ . /../vendor/autoload.php); require(__DIR__ . /../vendor/yiisoft/yii2/Yii.php); $config require __DIR__ . /../config.php; (new yii\web\Application($config))-run();紧接着创建config.php承载整个应用配置?php return [ id micro-app, // 应用的 basePath 就是 micro-app 目录 basePath __DIR__, // 应用从这里查找所有控制器 controllerNamespace micro\controllers, // 设置别名让 micro 命名空间下的类可以被自动加载 aliases [ micro __DIR__, ], ];关于这段配置有几个值得注意的底层细节controllerNamespaceyii\base\Application的默认值是app\controllers见 framework/base/Application.php。本示例改为micro\controllers是为了演示命名空间完全可以自定义——你只需让 Composer 的autoload或这里的aliases 框架内置自动加载能把命名空间映射到正确目录即可。basePath作为app别名的基础也是解析相对路径、定位默认目录如app/runtime、app/web的根。为何要把配置独立成文件除了职责分离更关键的是这份配置可以被控制台应用复用。控制台入口脚本vendor/bin/yii会启动yii\console\Application其构造函数会调用loadConfig()——该方法扫描命令行参数若存在--appconfig选项则加载对应配置文件见 framework/console/Application.php。这正是后续执行迁移命令时能共用config.php的原因。至此项目已可开始编码。目录结构完全由你掌控只要命名空间正确即可。创建第一个控制器Hello World创建controllers目录添加SiteController.php。它是默认控制器负责处理未显式指定路径的请求?php namespace micro\controllers; use yii\web\Controller; class SiteController extends Controller { public function actionIndex() { return Hello World!; } }控制器名称可自由更换只需配置yii\base\Application::$defaultRoute即可。例如想改用DefaultController则在配置中加上defaultRoute default/index。此时项目结构如下micro-app/ ├── composer.json ├── config.php ├── web/ └── index.php └── controllers/ └── SiteController.php注波兰语版文档中的结构图省略了config.php但英文原版与上述配置说明均包含它实际项目中必须存在。用内置 Web 服务器快速验证如果尚未配置 Web 服务器可以参考服务器配置示例更快的方案是使用框架内置命令yii serve它在micro-app/目录下执行vendor/bin/yii serve --docroot./web该命令由 framework/console/controllers/ServeController.php 实现其背后直接调用 PHP 内置 Web 服务器php -S--docroot文档根目录默认值即为app/web源码public $docroot app/web;--port监听端口默认8080快捷别名-t对应docroot、-p对应port、-r对应router见 ServeController.php地址参数默认为localhost若需被远程机器如虚拟机外部访问可显式传入0.0.0.0:8000。在浏览器打开应用地址即可看到SiteController::actionIndex()返回的 Hello World!。构建 REST APIposts 接口下面把微框架升级为一个可用的 JSON API管理帖子posts数据。第一步配置数据库连接在config.php中加入components.dbcomponents [ db [ class yii\db\Connection, dsn sqlite:micro/database.sqlite, ], ],这里使用 SQLite 是为了演示简便micro/database.sqlite会解析为micro-app/database.sqlite。生产环境可替换为 MySQL、PostgreSQL 等更多选项见数据库访问指南。第二步用迁移创建数据表通过数据库迁移创建posts表。因为前面把配置独立成了文件现在才能通过--appconfig让控制台应用复用同一份配置vendor/bin/yii migrate/create --appconfigconfig.php create_post_table --fieldstitle:string,body:text vendor/bin/yii migrate/up --appconfigconfig.php第一条命令生成迁移文件第二条将其应用到数据库。--fields参数由 framework/console/controllers/MigrateController.php 解析源码中public $fields [];其语法支持name:string(12):notNull:unique这样的链式定义可指定类型、长度、约束等因此title:string,body:text会生成title字符串与body文本两列。--appconfig的处理逻辑对应前文提到的OPTION_APPCONFIG常量与loadConfig()方法。第三步创建 ActiveRecord 模型创建models目录与Post.php?php namespace micro\models; use yii\db\ActiveRecord; class Post extends ActiveRecord { public static function tableName() { return {{posts}}; } }这是一个标准的 ActiveRecord 模型代表posts表的一行数据。注意波兰语版文档中tableName()返回{{posts}}英文原版为{{post}}请以你实际创建的迁移表名保持一致。{{ }}双花括号表示表名可被框架自动添加前缀。ActiveRecord 的完整能力见Active Record 指南。第四步创建 REST 控制器在controllers中添加PostController?php namespace micro\controllers; use yii\rest\ActiveController; class PostController extends ActiveController { public $modelClass micro\models\Post; public function behaviors() { // 移除 rateLimiter它需要已认证用户才能工作 $behaviors parent::behaviors(); unset($behaviors[rateLimiter]); return $behaviors; } }ActiveController是 Yii 2 REST 能力的核心源码见 framework/rest/ActiveController.phpmodelClass必须设置init()中若其为null会抛出InvalidConfigException源码 L66-L72开箱即用的六个动作index列表、view详情、create创建、update更新、delete删除、options返回允许的 HTTP 方法分别由IndexAction、ViewAction、CreateAction、UpdateAction、DeleteAction、OptionsAction实现源码 L77-L111HTTP 方法映射index/view接受GET/HEADcreate接受POSTupdate接受PUT/PATCHdelete接受DELETE源码 L116-L125可覆盖checkAccess()做权限校验不通过时抛出ForbiddenHttpException。而behaviors()中默认绑定的内容协商ContentNegotiator、HTTP 方法过滤VerbFilter、认证CompositeAuth与限流RateLimiter均定义在父类 framework/rest/Controller.php。其中ContentNegotiator已预置application/json与application/xml两种响应格式RateLimiter依赖认证用户故本示例将其移除以免报错。动作执行结果会经afterAction()中的serializeData()Serializer自动序列化为 JSON/XML。至此API 已能响应以下地址/index.php?rpost— 列出所有帖子/index.php?rpost/viewid1— 查看 ID 为 1 的帖子/index.php?rpost/create— 创建帖子/index.php?rpost/updateid1— 更新 ID 为 1 的帖子/index.php?rpost/deleteid1— 删除 ID 为 1 的帖子第五步进阶为真正的 JSON API当前 API 在输入侧只识别 URL 编码的表单数据。要接收 JSON 请求体需要配置yii\web\JsonParsercomponents [ request [ parsers [ application/json yii\web\JsonParser, ], ], ],JsonParser实现于 framework/web/JsonParser.php其两个可配置属性值得了解asArray默认true将 JSON 解码为关联数组与throwException默认true请求体为非法 JSON 时抛出BadRequestHttpException源码 L35-L65。此外/index.php?r...这种带r参数的 URL 之所以出现是因为UrlManager的enablePrettyUrl默认关闭、showScriptName默认开启见 framework/web/UrlManager.php。要让 URL 更友好可配置美化路由具体做法见 REST 路由指南components [ urlManager [ enablePrettyUrl true, showScriptName false, ], ],继续深入参考与测试官方 REST 控制器、序列化等机制在仓库测试中有直接佐证例如 tests/framework/rest/IndexActionTest.php 与 tests/framework/rest/UrlRuleTest.php可据此验证ActiveController各动作与路由规则的实际行为。应用骨架与生命周期可读 structure-applications.md、structure-controllers.mdREST 系列的完整讲解见 rest-quick-start.md、rest-controllers.md、rest-response-formatting.md。项目后续如何规划可参考 Looking Ahead 与 start-workflow.md。小结本文证明了「Yii 2 本身就是微框架」这一论断仅凭一个入口脚本、一份配置、一个控制器与一个继承自ActiveController的 REST 控制器就能在数分钟内交付可增删改查的 JSON API。整个过程不依赖任何应用模板而框架的路由、依赖注入、迁移、ActiveRecord 等底层组件全部位于 framework/一如既往地为你兜底。当你的项目恰好只需要接口、不需要视图与资源管理时这种轻量组装方式就是最贴合需求的选择。赞分享后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载相关推荐Yii 2 微框架实战脱离项目模板从零构建 JSON API 应用Yii 2 微框架实战脱离项目模板从零构建 JSON API 应用 Yii 2 虽然常以 Basic 模板或 Advanced 模板的面貌出现但它的核心框后端Web框架从JSON到数据集unet-pytorch标注文件处理工具json_to_dataset使用指南从JSON到数据集unet pytorch标注文件处理工具json_to_dataset使用指南 unet pytorch是一个基于PyTorch实现的U N人工智能计算机视觉深度学习94list源码学习笔记PHP语法在现代Web应用中的实践94list源码学习笔记PHP语法在现代Web应用中的实践 94list作为一款百度网盘分享链接分析渲染列表辅助下载的开源程序其源码是学习PHP在现代Web上一篇解锁Peewee生态系统从入门到企业级应用的全方位资源指南下一篇ego-planner B样条优化器完全指南从理论到实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表