十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nextcloud插件开发实战:一条路由、一个Controller,把Hello World挂进你的网盘

Nextcloud插件开发实战:一条路由、一个Controller,把Hello World挂进你的网盘 Nextcloud插件开发实战一条路由、一个Controller把Hello World挂进你的网盘【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server照着这篇文章走完一遍你的浏览器里会多出一个自己署名的页面/apps/hello/打开就是一句Hello from my plugin。这不是玩具——Nextcloud 插件开发的所有应用从评论、分享到底层设置都长在这条链路上。本文面向想给团队定制功能、但没写过 Nextcloud server 插件的开发者不堆概念只走最短链路从 Hello World 一路走到能打包、能发布。先跑起来Hello World 的最短链路️ 别急着理解全貌先让它亮灯。最短链路五步每步一句话。装依赖。要求 PHP 8.1 及以上带 ctype、curl、dom、gd、json 等扩展、Node.js 16、Composer 2.0完整依赖清单就在仓库根目录的 composer.json。composer install npm install前者装 PHP 扩展后者装前端工具链。一句话把 Nextcloud 本体需要的地基先打好。建目录写最小 info.xml。在apps/下新建hello/里面放appinfo/info.xmlinfo idhello/id nameHello/name version1.0.0/version licenceagpl/licence authorYou/author namespaceHello/namespace dependencies nextcloud min-version36 max-version36/ /dependencies /info五个字段一个都不能少。这个文件是 Nextcloud 认识你应用的唯一名片相当于身份证。配一条路由。appinfo/routes.php?php return [ routes [ [name Hello#index, url /, verb GET], ] ];路由名、URL、HTTP 动词一行搞定。它告诉框架用户访问/apps/hello/时去调Hello#index。写一个 Controller。lib/Controller/HelloController.php?php namespace OCA\Hello\Controller; use OCP\AppFramework\Controller; use OCP\IRequest; class HelloController extends Controller { public function __construct(string $appName, IRequest $request) { parent::__construct($appName, $request); } public function index() { return new \OCP\AppFramework\Http\DataDisplayResponse(Hello from my plugin); } }构造函数把$appName和$request交给父类index()返回一个响应。控制器就是请求进来、响应出去的中间人仅此而已。把插件挂进 apps 目录。开发期用软链代码改完立刻生效不用反复拷贝ln -s /path/to/your/hello apps/hello occ app:enable hello软链的意思是apps/hello只是个指针真实代码还在你项目的老地方改哪份都一样。浏览器访问/apps/hello/——跑起来了。把结构拆开看每个字段为什么在那五步走完你可能一脸懵为什么是这个目录为什么是这些字段拆开讲。appinfo 是核心因为框架只读它。Nextcloud 安装应用时不关心你lib/里藏了多少类它先看appinfo/info.xml决定这个应用能不能装、装在哪个版本区间再看appinfo/routes.php决定哪些 URL 归你管。参考 apps/comments/appinfo/ 下的两个文件官方应用的结构也是这两块打底。目录树本身没有魔法lib/放服务端、src/放前端、css/img/l10n/各司其职纯粹是约定俗成约定就是为了让所有人都找得到。id 定生死。全小写、下划线分词比如files_versions。它决定三件事安装目录名、URL 前缀/apps/{id}/、info.xml里namespace对应的命名空间OCA\{Namespace}。id是hello命名空间就得是OCA\Hello——id 小写、namespace 驼峰一个字母对不上类就找不到报的错还是最抽象的Class not found。所以 id 起名时想清楚它几乎没法改。dependencies 卡版本是故意的。官方 apps/comments/appinfo/info.xml 里写的是min-version36 max-version36卡死在 36因为这个代码库本身就是 36 的 dev 版——插件和宿主大版本绑定写宽了等于没写写窄了商店里没人敢装。你的应用该写多大范围取决于你实际调用了哪个大版本引入的 API。路由 verb 不是摆设。verb决定 HTTP 方法GET 用于读POST 用于写。框架靠它分发请求也靠它做 CSRF 检查——下面会再咬你一口。官方 apps/comments/appinfo/routes.php 里那条Notifications#view路由verb就是GET。从 Demo 到可用图标、本地化、打包Demo 能跑之后距离一个能发出去的应用还差三件事样子、语言、打包。图标。放在img/下推荐 SVG风格对照 core/img/apps/ 里的应用图标。一个应用只有一个图标它是导航栏里的门面别用截图糊弄。本地化。翻译文件放l10n/用 occ 生成骨架occ l10n:create hello occ l10n:update hello第一条给指定语言建翻译文件第二条更新现有文件。代码里所有t(hello, ...)包裹的字符串会被抽出来剩下的交给翻译者你不用手动整理词条。打包。把整个应用目录压成 zip根目录就是应用本体别多套一层zip -r hello.zip .发布渠道两条路。手动安装解压到目标机器的apps/目录再occ app:enable适合内网、私有部署最快。应用商店提交到 apps.nextcloud.com 走审核适合公开发布慢但省心。两条路对产物要求一样——一个干净的 zip。卡住了去哪查 写插件卡壳基本逃不出三个出口官方文档core/doc/ 下的管理员与用户文档讲系统行为不教写插件但能帮你判断这个功能该不该在插件里做API 定义lib/public/ 整个目录就是服务端 APIOCP\前缀的接口文档都在这写 Controller 时 IDE 跳转到这里看签名比翻博客可靠抄官方作业apps/ 目录下每个都是活的参考。看 apps/files/ 学路由怎么拆看 apps/comments/ 学前端怎么和后端握手看apps/settings/学管理界面长什么样。最后三个真实会踩的坑软链指错方向。ln -s的参数写反软链指向自己occ 扫描apps/时直接跳过你occ app:enable报应用不存在。判断方法ls -l apps/hello看箭头指到哪。NoCSRFRequired 别随手贴。这个注解是关掉 CSRF 保护的调试期加在NoCSRFRequired上方便调接口忘了删就是给任何网站开了伪造你用户请求的后门。生产代码里只有真正面向第三方、带 token 校验的端点才配拥有它。id 改了一半。有人嫌hello短改成my_hello目录名改了、URL 忘了、namespace 还是OCA\Hello——三者必须同步改之前先把OCA\Hello全局搜一遍。把这三条记下来加上前面那条最短链路Nextcloud 插件开发就没有玄学部分了装依赖、写 info.xml、配一条路由、一个 Controller、软链进 apps——剩下的都是往这个骨架上长肉。【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表