├── .gitignore
├── LICENSE
├── README.md
├── app
├── affix
│ ├── event
│ │ └── event.php
│ ├── lang
│ │ └── lin.en.php
│ ├── response
│ │ ├── jsonxml
│ │ │ └── template.php
│ │ └── view
│ │ │ └── welcome.php
│ └── route
│ │ └── route.php
├── block
│ ├── formatter
│ │ └── Formatter.php
│ ├── mapper
│ │ └── Mapper.php
│ ├── model
│ │ └── Model.php
│ └── validator
│ │ └── Validator.php
├── boot.php
├── boot.production.php
├── config
│ ├── lin-servers.php
│ ├── lin-servers.production.php
│ ├── lin.php
│ └── lin.production.php
├── layer
│ ├── Error.php
│ └── Index.php
├── lib
│ └── helper.php
└── register.php
├── composer.json
└── public
├── .htaccess
├── index.php
├── resource
└── lin.css
├── robots.txt
└── web.config
/.gitignore:
--------------------------------------------------------------------------------
1 | /data
2 | /cache
3 | /vendor
4 | /.idea
5 | /.vscode
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | 本程序采用apache2.0开源协议。作者:林澜叶(linlanye)版权所有
2 |
3 |
4 | Apache License
5 | Version 2.0, January 2004
6 | http://www.apache.org/licenses/
7 |
8 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
9 |
10 | 1. Definitions.
11 |
12 | "License" shall mean the terms and conditions for use, reproduction,
13 | and distribution as defined by Sections 1 through 9 of this document.
14 |
15 | "Licensor" shall mean the copyright owner or entity authorized by
16 | the copyright owner that is granting the License.
17 |
18 | "Legal Entity" shall mean the union of the acting entity and all
19 | other entities that control, are controlled by, or are under common
20 | control with that entity. For the purposes of this definition,
21 | "control" means (i) the power, direct or indirect, to cause the
22 | direction or management of such entity, whether by contract or
23 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
24 | outstanding shares, or (iii) beneficial ownership of such entity.
25 |
26 | "You" (or "Your") shall mean an individual or Legal Entity
27 | exercising permissions granted by this License.
28 |
29 | "Source" form shall mean the preferred form for making modifications,
30 | including but not limited to software source code, documentation
31 | source, and configuration files.
32 |
33 | "Object" form shall mean any form resulting from mechanical
34 | transformation or translation of a Source form, including but
35 | not limited to compiled object code, generated documentation,
36 | and conversions to other media types.
37 |
38 | "Work" shall mean the work of authorship, whether in Source or
39 | Object form, made available under the License, as indicated by a
40 | copyright notice that is included in or attached to the work
41 | (an example is provided in the Appendix below).
42 |
43 | "Derivative Works" shall mean any work, whether in Source or Object
44 | form, that is based on (or derived from) the Work and for which the
45 | editorial revisions, annotations, elaborations, or other modifications
46 | represent, as a whole, an original work of authorship. For the purposes
47 | of this License, Derivative Works shall not include works that remain
48 | separable from, or merely link (or bind by name) to the interfaces of,
49 | the Work and Derivative Works thereof.
50 |
51 | "Contribution" shall mean any work of authorship, including
52 | the original version of the Work and any modifications or additions
53 | to that Work or Derivative Works thereof, that is intentionally
54 | submitted to Licensor for inclusion in the Work by the copyright owner
55 | or by an individual or Legal Entity authorized to submit on behalf of
56 | the copyright owner. For the purposes of this definition, "submitted"
57 | means any form of electronic, verbal, or written communication sent
58 | to the Licensor or its representatives, including but not limited to
59 | communication on electronic mailing lists, source code control systems,
60 | and issue tracking systems that are managed by, or on behalf of, the
61 | Licensor for the purpose of discussing and improving the Work, but
62 | excluding communication that is conspicuously marked or otherwise
63 | designated in writing by the copyright owner as "Not a Contribution."
64 |
65 | "Contributor" shall mean Licensor and any individual or Legal Entity
66 | on behalf of whom a Contribution has been received by Licensor and
67 | subsequently incorporated within the Work.
68 |
69 | 2. Grant of Copyright License. Subject to the terms and conditions of
70 | this License, each Contributor hereby grants to You a perpetual,
71 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
72 | copyright license to reproduce, prepare Derivative Works of,
73 | publicly display, publicly perform, sublicense, and distribute the
74 | Work and such Derivative Works in Source or Object form.
75 |
76 | 3. Grant of Patent License. Subject to the terms and conditions of
77 | this License, each Contributor hereby grants to You a perpetual,
78 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
79 | (except as stated in this section) patent license to make, have made,
80 | use, offer to sell, sell, import, and otherwise transfer the Work,
81 | where such license applies only to those patent claims licensable
82 | by such Contributor that are necessarily infringed by their
83 | Contribution(s) alone or by combination of their Contribution(s)
84 | with the Work to which such Contribution(s) was submitted. If You
85 | institute patent litigation against any entity (including a
86 | cross-claim or counterclaim in a lawsuit) alleging that the Work
87 | or a Contribution incorporated within the Work constitutes direct
88 | or contributory patent infringement, then any patent licenses
89 | granted to You under this License for that Work shall terminate
90 | as of the date such litigation is filed.
91 |
92 | 4. Redistribution. You may reproduce and distribute copies of the
93 | Work or Derivative Works thereof in any medium, with or without
94 | modifications, and in Source or Object form, provided that You
95 | meet the following conditions:
96 |
97 | (a) You must give any other recipients of the Work or
98 | Derivative Works a copy of this License; and
99 |
100 | (b) You must cause any modified files to carry prominent notices
101 | stating that You changed the files; and
102 |
103 | (c) You must retain, in the Source form of any Derivative Works
104 | that You distribute, all copyright, patent, trademark, and
105 | attribution notices from the Source form of the Work,
106 | excluding those notices that do not pertain to any part of
107 | the Derivative Works; and
108 |
109 | (d) If the Work includes a "NOTICE" text file as part of its
110 | distribution, then any Derivative Works that You distribute must
111 | include a readable copy of the attribution notices contained
112 | within such NOTICE file, excluding those notices that do not
113 | pertain to any part of the Derivative Works, in at least one
114 | of the following places: within a NOTICE text file distributed
115 | as part of the Derivative Works; within the Source form or
116 | documentation, if provided along with the Derivative Works; or,
117 | within a display generated by the Derivative Works, if and
118 | wherever such third-party notices normally appear. The contents
119 | of the NOTICE file are for informational purposes only and
120 | do not modify the License. You may add Your own attribution
121 | notices within Derivative Works that You distribute, alongside
122 | or as an addendum to the NOTICE text from the Work, provided
123 | that such additional attribution notices cannot be construed
124 | as modifying the License.
125 |
126 | You may add Your own copyright statement to Your modifications and
127 | may provide additional or different license terms and conditions
128 | for use, reproduction, or distribution of Your modifications, or
129 | for any such Derivative Works as a whole, provided Your use,
130 | reproduction, and distribution of the Work otherwise complies with
131 | the conditions stated in this License.
132 |
133 | 5. Submission of Contributions. Unless You explicitly state otherwise,
134 | any Contribution intentionally submitted for inclusion in the Work
135 | by You to the Licensor shall be under the terms and conditions of
136 | this License, without any additional terms or conditions.
137 | Notwithstanding the above, nothing herein shall supersede or modify
138 | the terms of any separate license agreement you may have executed
139 | with Licensor regarding such Contributions.
140 |
141 | 6. Trademarks. This License does not grant permission to use the trade
142 | names, trademarks, service marks, or product names of the Licensor,
143 | except as required for reasonable and customary use in describing the
144 | origin of the Work and reproducing the content of the NOTICE file.
145 |
146 | 7. Disclaimer of Warranty. Unless required by applicable law or
147 | agreed to in writing, Licensor provides the Work (and each
148 | Contributor provides its Contributions) on an "AS IS" BASIS,
149 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
150 | implied, including, without limitation, any warranties or conditions
151 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
152 | PARTICULAR PURPOSE. You are solely responsible for determining the
153 | appropriateness of using or redistributing the Work and assume any
154 | risks associated with Your exercise of permissions under this License.
155 |
156 | 8. Limitation of Liability. In no event and under no legal theory,
157 | whether in tort (including negligence), contract, or otherwise,
158 | unless required by applicable law (such as deliberate and grossly
159 | negligent acts) or agreed to in writing, shall any Contributor be
160 | liable to You for damages, including any direct, indirect, special,
161 | incidental, or consequential damages of any character arising as a
162 | result of this License or out of the use or inability to use the
163 | Work (including but not limited to damages for loss of goodwill,
164 | work stoppage, computer failure or malfunction, or any and all
165 | other commercial damages or losses), even if such Contributor
166 | has been advised of the possibility of such damages.
167 |
168 | 9. Accepting Warranty or Additional Liability. While redistributing
169 | the Work or Derivative Works thereof, You may choose to offer,
170 | and charge a fee for, acceptance of support, warranty, indemnity,
171 | or other liability obligations and/or rights consistent with this
172 | License. However, in accepting such obligations, You may act only
173 | on Your own behalf and on Your sole responsibility, not on behalf
174 | of any other Contributor, and only if You agree to indemnify,
175 | defend, and hold each Contributor harmless for any liability
176 | incurred by, or claims asserted against, such Contributor by reason
177 | of your accepting any such warranty or additional liability.
178 |
179 | END OF TERMS AND CONDITIONS
180 |
181 | APPENDIX: How to apply the Apache License to your work.
182 |
183 | To apply the Apache License to your work, attach the following
184 | boilerplate notice, with the fields enclosed by brackets "[]"
185 | replaced with your own identifying information. (Don't include
186 | the brackets!) The text should be enclosed in the appropriate
187 | comment syntax for the file format. We also recommend that a
188 | file or class name and description of purpose be included on the
189 | same "printed page" as the copyright notice for easier
190 | identification within third-party archives.
191 |
192 | Copyright 2018- linlanye
193 |
194 | Licensed under the Apache License, Version 2.0 (the "License");
195 | you may not use this file except in compliance with the License.
196 | You may obtain a copy of the License at
197 |
198 | http://www.apache.org/licenses/LICENSE-2.0
199 |
200 | Unless required by applicable law or agreed to in writing, software
201 | distributed under the License is distributed on an "AS IS" BASIS,
202 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
203 | See the License for the specific language governing permissions and
204 | limitations under the License.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Lin/1.0
2 | [](https://packagist.org/packages/lin/lin)
3 | [](https://packagist.org/packages/lin/lin)
4 | [](http://www.php.net/)
5 | [](https://packagist.org/packages/lin/lin)
6 |
7 | ## 介绍
8 |
9 | **Lin是**一套基于php7.2的全新web框架,它具有一套全组件化的开发理念,避免了以往web框架可定制性差、扩展开发繁杂、布局耦合度较高等缺点,完美实现了三重分离:应用层、框架层、组件层。使用者只需通过堆积木形式将一个个功能进行组装即可,而无需花费大量精力去理解一个框架的核心理念。Lin解耦了绝大多数开发场景,让协同开发更为简单,并且应用结构从一开始就基于高度弹性化的架构模式,对后续扩展、维护、升级都可以0成本轻松实现。
10 |
11 | ## 特性
12 |
13 | * 全组件化,框架运行流程完全由使用者自行控制,通过一个个组件堆积而成。
14 | * 自带模拟kv、queue服务器,无需安装memcache和redis等外部环境,并可轻松一键切换。
15 | * 原生透明化支持SQL、Key-Value、Queue等服务器主从、多节点访问。
16 | * 极简主义设计。所有的方法无论命名、调用都保持简单一致,只呈现最基本的php语法。
17 | * 新的组织架构,解决传统MVC模式的短板,可对应用轻量化弹性升级,该架构称为LBA(Layer, Block, Affix,见下述解释)。
18 | * 涵盖web开发的绝大多数场景,组件功能接口简单,学习接近0成本。(参见[lin/components](http://github.com/linlanye/lin-components))
19 | * 高度优化并整合的组件功能,如数据模型、数据校验、安全场景、视图、路由等。
20 | * 生产环境和开发环境无缝替换,生产部署极致简单。
21 |
22 |
23 | ## LBA架构
24 |
25 | LBA(Layer, Block, Affix)架构由层、块、摆件三个部分构成,由**林澜叶**独自提出。
26 |
27 | * **层**:核心架构所在,由整套不同的逻辑单元组成,彼此之间相互独立,是整个应用的骨架部分。如缓存层、数据访问层、控制器层、响应层等等。不同的层提供不同的应用场景,一个层可以看作一个用于调度不同功能的类。
28 | * **块**:依托于层而存在,为层提供一种功能,是对层功能的具体实现,是整个应用的血肉部分。一个块可以看作是具有某个功能的类,不同的块在同一个层中构成一个完备的应用场景。如在数据访问层中,数据模型提供对数据库的对象化操作,数据格式化器和映射器则提供存储数据到应用数据的一个映射。
29 | * **摆件**:作为对层的点缀或装饰,是一种可选的功能,它的添加和移除对整个应用架构没有影响。不同的摆件可以看作是一种功能扩展,它可以是一个类,也可以是一个脚本,一句代码,起到强化应用的作用。如视图页面、路由文件、语言包等在小型应用中都可以看作摆件,可以无需视图(API开发),也可以无需路由(仅通过层来调度),更可以无需语言包。
30 |
31 | 对于MVC架构,Model相当于块,View则为摆件,Controller则对应层。基于MVC的各种变体也能在LBA架构中找到对应,实际上LBA正是对这套架构体系的一个更抽象的扩展,它能够适用于更大型的应用架构中。值得注意的是,LBA架构并没有对功能进行约束,开发者需根据实际情况选型。例如小型应用中路由可以看作摆件,但在大型应用中,路由则应作为层。
32 |
33 | ## 目录结构
34 |
35 | 初始主要结构如下:
36 | ~~~
37 | your_app
38 | │
39 | ├─app 应用目录
40 | │ │
41 | │ ├─affix 摆件目录
42 | │ │ ├─event 事件目录
43 | │ │ ├─lang 语言包目录
44 | │ │ ├─response 响应目录
45 | │ │ │ ├─jsonxml json和xml的模版目录
46 | │ │ │ └─view 视图页面目录
47 | │ │ │
48 | │ │ └─route 路由规则目录
49 | │ │
50 | │ ├─block 块目录
51 | │ │ ├─formatter 数据格式化器目录
52 | │ │ ├─mapper 数据映射器目录
53 | │ │ ├─model 数据模型目录
54 | │ │ └─validator 数据验证器目录
55 | │ │
56 | │ ├─config 配置目录
57 | │ │ ├─lin-servers.php 服务器配置
58 | │ │ ├─lin-servers.production.php 服务器配置(生产环境)
59 | │ │ ├─lin.php 组件配置
60 | │ │ └─lin.production.php 组件配置(生产环境)
61 | │ │
62 | │ ├─layer 层目录
63 | │ │
64 | │ ├─lib 库目录
65 | │ │ └─helper.php lin组件的助手函数
66 | │ │
67 | │ ├─boot.production.php 启动文件(生产环境)
68 | │ ├─boot.php 启动文件
69 | │ └─register.php basement组件注册文件
70 | │
71 | ├─public 入口根目录
72 | │ ├─resource 资源文件夹
73 | │ └─index.php 入口文件
74 | │
75 | ├─vendor 组件目录
76 | │ ├─composer composer组件
77 | │ ├─basement basement组件
78 | │ └─lin lin组件
79 | │
80 | ~~~
81 |
82 |
83 | ## 安装
84 |
85 | ```
86 | //1.composer方式
87 | composer create-project lin/lin
88 |
89 | //2.源码+composer
90 | 进入源码根目录,执行composer install
91 |
92 | //3.下载压缩文件
93 | https://downloads.lin-php.com/lin-1.0.0.zip
94 | ```
95 |
96 |
97 | ## 使用
98 |
99 | * 在`app/boot.php`文件中定义整个应用执行流程。同理编写生产环境的`app/boot.production.php`文件
100 | * 在`app/register.php`文件中注册[basement](http://github.com/linlanye/basement)的标准组件。
101 | * 在`app/layer`目录中,根据应用复杂度,建立不同的层或建立不同的目录归档不同的层。
102 | * 在`app/block`目录中,根据具体业务场景,建立各种块,如数据模型、映射、校验、格式化等。
103 | * 在`app/affix`目录中,根据需求建立摆件,如定义事件、路由、多语言、视图页面或json的响应模版。
104 | * 在`app/config`目录中,根据实际情况更改配置文件。
105 | * 在`app/lib`目录中,存放自己的库函数或第三方类库。
106 | * 生产环境下,更改`public/index.php`中启动文件为`app/boot.production.php`。
107 |
108 |
109 | ## 开发建议
110 | * 使用basement组件的情况,使用`Linker`类来调用,具体见[basement](http://github.com/linlanye/basement)。
111 | * 文件夹全小写。
112 | * 满足psr-4规则。
113 | * 使用 `/` 作为目录分隔符。
114 |
115 |
116 | ## 详细文档
117 | * [github](https://github.com/linlanye/lin-docs)
118 | * [官网](https://docs.lin-php.com)
119 |
120 | ## 捐赠
121 | 
122 |
123 | ## 版权信息
124 | * 作者:林澜叶(linlanye)版权所有。
125 | * Eemail:linlanye@sina.cn
126 | * 开源协议:[Apache-2.0](LICENSE)
127 |
--------------------------------------------------------------------------------
/app/affix/event/event.php:
--------------------------------------------------------------------------------
1 | 'failed to create folder',
5 | '文件打开失败' => 'failed to open file',
6 | '文件不存在' => 'file not exists',
7 | '缺少可用文件' => 'lack of valid file',
8 | '路由无法缓存闭包,闭包占用需超1行' => 'unable to cache the Closure, there must be two lines of code at least',
9 | '路由规则需用"."分割' => 'routing rules need "." to explode',
10 | '路由规则冲突' => 'conflict in routing rules',
11 | '验证方法不存在' => 'validation method not exists',
12 | '验证规则不存在' => 'validation rule not exists',
13 | '格式化方法不存在' => 'formatting method not exists',
14 | '当前数据超过文件大小限制' => 'the size of data exceeds the max file size',
15 | '冗余文件阈值不可超过PHP_INT_MAX' => 'the thrshold of the redundant file size must be less than PHP_INT_MAX',
16 | '无法写入数据,当前队列已满' => 'unable to write data due to full queue',
17 | '服务器连接失败' => 'failed to connect server',
18 | '缺少可用服务器' => 'lack of valid server',
19 | '预处理语句失败' => 'failed to preprocess statement',
20 | '未定义的方法' => 'undefined method',
21 | '未指定表名' => 'lack of table name',
22 | '未指定主键' => 'lack of primary key',
23 | '关联主字段和从字段数量不一致' => 'the count of relational fields between master and slave is inconsistent',
24 | '主键数量不匹配' => 'the number of primary keys is inconsistent',
25 | '缺少主键数据,更新或删除无法执行' => 'lack of primary keys, the method of update or delete can not be executed',
26 | '关系模型数据为空,不可写入' => 'unable to write due to the empty relational model',
27 | '更新和删除必须存在条件限制' => 'there must be conditions for updating and deleting',
28 | '操作符不存在' => 'operator not exists',
29 | '批量插入数据的格式不一致' => 'the format of bulk data for insertion is inconsistent',
30 |
31 | /**错误信息**/
32 | '缺少有效从模型,当前关联操作已略过' => 'lack of valid slave, the current relational operation is skipped',
33 | '缺少有效关联主字段,当前关联操作已略过' => 'lack of valid master fields, the current relational operation is skipped',
34 |
35 | /*DEBUG信息*/
36 | '总耗时' => 'Total Time Cost',
37 | '吞吐率' => 'Throughput',
38 | '内存用量' => 'Memory Cost',
39 | '操作系统' => 'Operate System',
40 | '服务器软件' => 'Server Software',
41 | '临时文件夹' => 'Temporary Folder',
42 | '统计' => 'Statistics',
43 | '执行数' => 'Running Count',
44 | '文件数' => 'File Count',
45 | '事件数' => 'Event Count',
46 | '日志数' => 'Log Count',
47 | '记录数' => 'Record Count',
48 | '格式化数' => 'Formatting Count',
49 | '映射数' => 'Mapping Count',
50 | '创建数' => 'Building Count',
51 | '流程数' => 'Flow Count',
52 | '规则数' => 'Rule Count',
53 | '文件明细' => 'File List',
54 | '事件明细' => 'Event List',
55 | '日志明细' => 'Log List',
56 | '记录明细' => 'Record List',
57 | '格式化明细' => 'Formatting List',
58 | '映射明细' => 'Mapping List',
59 | '执行明细' => 'Running List',
60 | '流程明细' => 'Flow List',
61 | '创建明细' => 'Building List',
62 | '规则明细' => 'Rule List',
63 | '配置明细' => 'Configuration List',
64 | '路由类型' => 'Routing Type',
65 | '缓存文件' => 'Cache File',
66 | ];
67 |
--------------------------------------------------------------------------------
/app/affix/response/jsonxml/template.php:
--------------------------------------------------------------------------------
1 | 'ok', 'content' => null, 'code' => 0];
8 |
--------------------------------------------------------------------------------
/app/affix/response/view/welcome.php:
--------------------------------------------------------------------------------
1 | {use lin\url\URL}
2 |
3 |
4 |