基于 Laravel Route 的 ThinkSNS+ Component

在前面,我介绍了拓展类型,分别有 plus-compnent 和 plus-plugin 两个,这里重点讲以下如何实现 plus-component 的。

plus-component 是什么

就如同名字一样,plus 代表的是 ThinlSNS+ 程序,用 - 分割 后面的 component 就是「包」或者我们理解成应用。在这里的「应用」指的是通过实现 API 或者 web 的功能。所以产生了这个类型。

但是 plus-component 不只是应用,也可以是简单的功能拓展,例如medz/plus-storage-quniu就是拓展的七牛云储存。

composer 插件的建立

既然涉及到路由,最开始的想法,其实是 /routes 目录下生成文件,包的路由文件复制到这里来。后来,发现了问题不足。
最后想到,plus-component 的实现,不一定是基于路由的应用,也有可能是简单的拓展。我们看下中间插件的接口类:

其中 router 成了非必需项。

转而,拥有了三个 hook 方法 install、update 和 uninstall 方法,这三个分别对应的是安装,升级,卸载。
而设计中,plus-component 中间插件会在 Laravel 的 /config/component.php 中增加如下配置:

中间插件的 composer.json 配置

其实很简单,看到上面添加到 /config/component.php 的代码了, installer 项哪里来的呢?看下 包的配置:

就是最后的 extra.installer-class 配置的,这里是完整的 class name,这样,在 composer 插件执行的时候读取这个额外的配置,并写入到 Laravel 的配置文件中。

install/update/uninstall

在 ThinkSNS+ 中有 php artisan component [install|update|unstall] vendor/name 这样一个命令,主要是用作 包的安装,升级,卸载。
实际运行如下:

通过这样的方式安装包,而这个命令会读取 /config/component.php 的配置,从而得到 installer ,这样,在运行不同的参数的时候后,调用 install,uodate,uninstall 等 需求 hook 达到目的。

router

在最上面的接口类中你也看到了,有一个 router 方法,这个方法返回类型有两个 void|string,所以, void 代表没有路由,string 就表示包路由文件的绝对地址。

在 php artisan component 命令执行的时候,对应的添加 /config/component_routes.php 里面的配置。
在 /app/Providers/RouteServiceProvider.php 中如下:

可能你会误会,为什么只是 include 进来呢?是的,这里的代码其实是参照 Route::group 来的,而在包里面的文件,可以正常的使用 Route::* 进行路由配置。

resource

既然可以基于路由,那就必然会存在静态资源的问题,在接口类中也有这样的规定:

这里返回在包中静态资源存储的目录,执行安装或者升级命令的时候复制到 /public/vendor/name 目录下来达到静态资源发布的功能。

更高级的封装

这里其实是只模式封装,在 ThinkSNS+ 的 php artisan component 其实还有一个 --link 参数,做什么用的?其实不难理解,就是吧静态资源由原来的复制变成创建软链。这在开发过程中很有用。

下期预告:下一篇文章,会简单的讲以下 ThinkSNS+ 自封装的命令实现。

开源代码仓库:

GitHub:https://github.com/zhiyicx/thinksns-plus

时间: 2024-12-31 20:07:35

基于 Laravel Route 的 ThinkSNS+ Component的相关文章

Notadd Beta2 fix1,基于 Laravel 的下一代 PHP 开发框架

Notadd Beta2 fix1 发布了,更新如下: Beta 2 fix1 (170527) 增强安装的逻辑处理 移除后台登录二次请求链接的问题 增强了权限架构(四级) 修复后台偶尔不能登录的问题 修复框架层文件缺失问题 Notadd是什么 Notadd 是基于 Laravel 和 Vue 的开源 PHP 框架, 由于其本身的灵活性和先进的技术架构,使得你通过模块(主功能).插件(功能增强).模板(前端样式)像搭积木一样组合成你想要的,能够快速完成商城.CMS.微信.论坛的开发. Notad

基于 Laravel 开发 ThinkSNS+ 中前端的抉择

Laravel Mix的放弃 在 Laravel 中,前端工作流默认是由 laravel-mix 包驱动的,集成了 Vue.js.而作为核心开发之一,也负责前端这块的开发.其实,这是seven第一次写 Vue,之前都是用 React 做开发. 然后seven和另一个核心成员 Wayne 在楼道抽烟聊前端这事情,要不要用 Vue,这个东西对于我们来说,都没有做过,我们都只会 React.然后突然Wayne司机来了一句"玩点没玩过的嘛"!就这样,我们决定前端使用 Vue. 跑题了,决定用什

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作

本教程基于Laravel 5.4 开始之前首先准备好开发环境,我们假设你已经安装好 Laravel,至于 Vue 的引入,请参考官方文档. 做好上述准备工作后就可以开始我们的开发了,本教程中我们将演示文章发布页面的表单 验证 . 首先在 routes/web.php 中新增两条路由规则: Route::get('post/create', 'PostController@create'); Route::post('post/save', 'PostController@save'); 然后在项

Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法

本文实例讲述了Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法.分享给大家供大家参考,具体如下: 1.简介 本扩展包添加了两个视图相关的Artisan命令到Laravel应用,以便我们通过Artisan命令即可创建和管理视图文件,可谓是进一步解放了生产力. 2.安装 还是通过Composer安装: composer require sven/artisan-view 安装完成后到config/app.php中注册服务提供者ArtisanViewServiceProv

LARAVEL 中使用 VUE 组件化开发例子

现今前端组件化开发.MVVM 模式,给开发带来了很多的便利,可读性.可维护性更高.然而自 Laravel 5.3 开始,VueJS 成为框架默认的标配. 本文基于 Laravel 5.1 LTS 版本引入 Vue 2.0 进行配置. 我已在 Github 配置好,Clone 下来后按照 README 安装依赖后即可用: https://github.com/jcc/vue-laravel-example 步骤一:配置 PACKAGE.JSON 1. 在根目录下修改 package.json, 可

[PHP] Laravel 5.1 实现第三方登录认证

Socialite Laravel 提供了简单易用的方式,使用 Laravel Socialite 进行OAuth认证(支持OAuth1 和 OAuth2). Socialite 目前支持的认证有 Facebook.Google.GitLab.Bitbucket.微信.QQ.微博等. Socialite 用法官方文档中已经讲得很详细了,英文好的同学,建议直接看 Laravel 官方文档,英文不好的同学(比如我),下面是中文文档:Laravel 5.0: http://laravel-china.

Laravel MVC的基本流程

Laravel MVC框架 Java代码   http://www.golaravel.com/download/   下载镜像优化版:基于Laravel 官方 GitHub 仓库源码的基础上安装了依赖库(vendor),页面打开巨慢的问题我们把所有引用的google字体全部删掉了等.   我们说说Laravel中Model,Controller,Views的工作流程,也就是下面这个顺序: Java代码   1.注册路由 ---> 2.创建控制器 ---> 3. 控制器中获取数据库数据 ---

ThinkSNS特有需求之--英文字符占 0.5 个,中文字符占 1 个

ThinkSNS后端框架使用laravel,每周和 laravel master 保持同步,而后台和 html 5 则采用 vue 开发.语言特性方面,采用 php 7 的严格模式. 言归正传,之所以写继篇,其实是来检讨的,上一次发表了<ThinkSNS+ 如何计算字符显示长度>后,有网友几经测试后告知str_word_count 有问题. 根据ThinkSNS+ 的进度安排,最近在研发支付功能,所以只能使用周末的时间做了一个兼容性更好的计算方法. 需求 重新说下需求:在我天朝 PM 经常会提

ThinkSNS+ 如何计算字符显示长度

今天我们来聊一下可能很多人都会头疼的东西:显示长度. 需求是这样的,在字符的显示上,两个英文单词才占一个中文或者其他语言的显示长度.如下: 上面排的是两个英文字母,一个汉字,一个Emoji.你会发现,在显示上占的宽度是一致的.一些设计上为了好看也要求有这样的处理. 例如,我们的用户名需求是最多12个非单字节字符或者24个单字节字符的需求也可以混合排的需求,我们写后端不得不处理这样的验证了. 需求规则是 /^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/ 在T