ddesrosiers / silex-annotation-provider
Silex 服务提供程序,允许在 ServiceControllers 中使用注解。
Requires
- php: >=7.1.0
- ext-pcre: *
- psr/simple-cache: ~1.0
- silex/silex: ~2.0
Requires (Dev)
- phpunit/phpunit: ~7.0
- symfony/browser-kit: ~2.4.0
- symfony/security: ~2.4
Suggests
- symfony/security: You will need this package to use the `Secure` annotation
README
silex-annotation-provider
Silex ServiceProvider,允许在 Silex 控制器中使用注解。在类中定义您的控制器,并使用注解来设置路由和定义修饰符。
v3 版本中的更改
- 重新设计注解格式。不再使用 Doctrine Annotations。
- 使用 PSR-16 缓存代替 Doctrine Cache。
- 简化功能集。为简化起见,移除了对 ServiceProviders、自定义 Service Controller 注册以及其他不常见自定义选项的支持。
- 最低 PHP 版本为 7.1。不支持 HHVM。
安装
使用 composer 安装 silex-annotation-provider。
{ "require": { "ddesrosiers/silex-annotation-provider": "~3.0" } }
注册
$app->register(new DDesrosiers\SilexAnnotations\AnnotationServiceProvider(), array( "annot.cache" => new MyPsr16Cache(), "annot.controllerDir" => "$srcDir/Controller", "annot.controllers" => [ MyClass1::class, MyClass2::class ] ));
参数
annot.controllerDir
指定搜索控制器的目录。该目录将递归搜索具有 @Controller
注解的类。找到的控制类将根据路由注解进行处理。必须指定此选项或 annot.controllers 以定位控制器。
annot.controllers
完全限定控制器名称的数组。如果设置,提供程序将自动将每个控制器注册为 ServiceController,并根据找到的注解设置路由和修饰符。
annot.cache
实现了 Psr\SimpleCache\CacheInterface 的类的实例。此缓存用于缓存注解和控制器列表以提高性能。
更快的控制器注册
Silex 必须在每次请求时注册您的应用程序中的每个端点。如果您有很多端点,那么这可能会在每个请求上产生显著的开销。Silex Annotations 可以通过使用 prefix
在 Controller
注解上过滤需要注册的控制器来提高此性能。只有在前缀与 URI 匹配时,我们才需要在 Controller 中注册端点。这样,Silex Annotations 允许比纯 Silex 更快的路由。
注解控制器
创建您的控制器。以下是一个示例,演示了使用注解注册端点的方法。
namespace DDesrosiers\Controller; use Symfony\Component\HttpFoundation\Response; /** * @Controller( * prefix => test * after => \DDesrosiers\Controller\TestController::converter * host => www.test.com * requireHttp * secure => ADMIN * ) */ class TestController { /** * @Route( * uri => GET test/{var} * assert => var, \d+ * convert => var, \DDesrosiers\Controller\TestController::converter * after => \DDesrosiers\Controller\TestController::converter * host => www.test.com * requireHttps * secure => DEV * value => var, default * ) */ public function testMethod($var) { return new Response("test Method: $var"); } public static function converter($var) { return $var; } }
我们的 TestController 中的注解解释如下
$controllerCollection = $app['controller_factory'] ->after('\DDesrosiers\Controller\TestController::converter'); ->host('www.test.com'); ->requireHttp(); ->secure('ADMIN'); $controllerCollection->get("test/{var}", "\\DDesrosiers\\Controller\\TestController:testMethod") ->assert('var', '\d+') ->convert('var', "\\DDesrosiers\\Controller\\TestController::converter"); ->host('www.test.com') ->requireHttps() ->secure('DEV') ->value('var', 'default'); $app->mount('/prefix', $controllerCollection);
注解
控制器
使用 @Controller 注解标记一个类为控制器。'prefix' 选项定义了控制器集合的挂载点。前缀必须是第一个选项。
@Route
使用 @Route 注解定义一个端点。'uri' 是必需的,并且必须是第一个定义的选项。
简写注解表示法
在控制器注解中,如果不需要 'prefix' 选项,则可以省略 'prefix' 键。
在路由注解中,如果不需要 'uri' 选项,则可以省略 'uri' 键。
namespace DDesrosiers\Controller; use Symfony\Component\HttpFoundation\Response; /** * @Controller(test) */ class TestController { /** * @Route(GET test/{var}) */ public function testMethod($var) { return new Response("test Method: $var"); } }