nicolascharpentier / silex-simple-annotations
为silex提供注解
dev-master
2016-07-14 11:41 UTC
Requires
- php: >= 5.3
Requires (Dev)
- php: >= 5.3
This package is not auto-updated.
Last update: 2024-09-14 18:58:24 UTC
README
警告
由于没有缓存,项目未完成(但正在工作),不建议在生产环境中使用。
你上次梦到每个控制器路由都需要注解是什么时候?
Silex Simple Annotations 允许你摆脱控制器提供者,并按照你的方式完成任务。
在控制器函数前加上注解。我们将处理其余部分。
/** * @Path /login * @Method POST * @Bind user.login */ public function loginRegisterAction(Application $app, Request $request) { $user = SomeSuperStaticClass::loginOrRegisterThisGuy($request, $app); return $app->json(); }
此示例将 POST 请求与 baseUrl/SomeControllerPrefixRouteYouGave/login 上的 loginRegisterAction 动作相关联
为什么我应该使用这个提供者?
经过快速谷歌搜索,目前似乎只有 2 个提供者
它们都使用 Doctrine\Annotations 来解析注解,并且似乎可以工作。
那么为什么?
- 你讨厌 Doctrine(奇怪)
- 你想要一个简单的语法
- 你很懒,只想为控制器提供你的
/src - 你可能需要一个自动化的文档。 这将在未来到来
为什么不呢?
- 这些其他提供者可能解析更快
- 我是法国人
我能做什么?这是免费的吗?
注册
首先,将以下内容添加到你的 composer.json 依赖中
"require": { "other/packages...": "...", "nicolascharpentier/silex-simple-annotations": "dev-master" },
然后,在任何你为项目注册的地方注册以下服务提供者
$app->register(new SilexSimpleAnnotations\AnnotationsServiceProvider(), array( 'simpleAnnots.controllersPath' => __DIR__ . '/../src/Controller', 'simpleAnnots.recursiv' => false, // Optional, default to false, 'simpleAnnots.controllersAsApplicationAwareServices' => false // Optional, default to false. Will instanciate controllers with $app as services ));
参数以 simpleAnnots 开头并以
- controllersPath : String 或 controller 目录/数组
- recursiv : Boolean,如果为 true,则对控制器的搜索将是 .. 递归的。不建议用于优化。
使用
对于你想要注解的每个控制器,循环以下内容。
-
为控制器提供一个前缀(它将被用于每个动作路由)
/** * @Prefix /user */ class UserController {
-
改进你的动作
/** * @Path /logout */ public function logoutAction(Application $app) { AbstractUserManager::disconnectCurrentUser($app); return $app->json(); } /** * @Path /stalk/{id} * @Bind user.stalkhim */ public function stalkAction(Application $app, $id) { AbstractUserManager::disconnectCurrentUser($app); return $app->json(); }
这意味着
- 对
/user/logout的GET请求将调用logoutAction,它将绑定到user.logout - 对
/user/stalk/1的GET请求将调用stalkAction,其中$id === '1',绑定到user.stalkhim
- 对
-
测试并享受!!
可用注解
-
控制器级别
- Prefix 必需
- 设置每个动作的路线前缀,也将用于默认绑定值。
- 例如。 /user
-
动作级别
- Path 必需
- 设置路线后缀。
- 例如。 /edit/{id}
- Bind 可选
- 设置路线绑定。
- 默认为 Prefix + '.' + actionName (
str_replace($function_name, 'Action', '')) - 例如。 user.edit
- Method 可选
- 设置请求方法。
- 默认为 GET
- 接受的值 GET POST PUT OPTIONS DELETE
- 例如。 POST PUT
待办事项
为什么 README 上的有序列表在每个步骤上只显示 '1'。支持路由的多个方法- 修改 Rules 类以便更易于理解
- 在构建控制器时通用化注解的使用
- 实现缓存系统
- 开始实现自动化的文档
Ps:目前没有在这方面工作,仍在检查问题。
反馈 & 贡献
任何类型的反馈都强烈鼓励,并将被听取。
你也可以自由地做出贡献或要求更改,即使是最小的
"不再需要控制器提供者。找回了我的妻子。我爱你" - 来自阿拉巴马的 George。
"这太棒了,我的法律电子商务网站购买量增加了200%" - 来自泰国的Ben。