nicolascharpentier/silex-simple-annotations

dev-master 2016-07-14 11:41 UTC

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,则对控制器的搜索将是 .. 递归的。不建议用于优化。

使用

对于你想要注解的每个控制器,循环以下内容。

  1. 为控制器提供一个前缀(它将被用于每个动作路由)

    /**
     * @Prefix /user
     */
    class UserController {
  2. 改进你的动作

    /**
     * @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/logoutGET 请求将调用 logoutAction,它将绑定到 user.logout
    • /user/stalk/1GET 请求将调用 stalkAction,其中 $id === '1',绑定到 user.stalkhim
  3. 测试并享受!!

可用注解

  • 控制器级别

    • 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。