mbezhanov / silex-route-annotations
一个服务提供程序,允许你在 Silex 应用程序中使用 @Route 注解。
0.2.1
2017-07-03 15:48 UTC
Requires
- php: ^7.0
- doctrine/annotations: ^1.4
- silex/silex: ^2.1
- symfony/cache: ^3.3
- symfony/config: ^3.3
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2024-09-23 00:20:01 UTC
README
一个服务提供程序,允许你在 Silex 应用程序中使用 @Route 注解,以便直接在你的控制器中定义路由。
安装
通过 Composer 安装库
composer require mbezhanov/silex-route-annotations
注册
要启用 @Route 注解,请将服务提供程序注册到你的应用程序中
<?php use Bezhanov\Silex\Routing\RouteAnnotationsProvider; use Silex\Application; use Symfony\Component\Cache\Adapter\FilesystemAdapter; $app = new Application(); $app->register(new RouteAnnotationsProvider(), [ // it is required to specify the full path, where your Controllers reside 'routing.controller_dir' => __DIR__ . '/../src/App/Controllers', // not required, but highly recommended to specify a Cache Adapter, in order to use caching 'routing.cache_adapter' => new FilesystemAdapter('routing', 0, __DIR__ . '/../var/cache'), ]);
基本用法
将服务提供程序注册到应用程序中允许你在控制器中使用 @Route 注解,与 SensioFrameworkExtraBundle / Symfony 中的注解相同。
<?php namespace Bezhanov\Silex\Routing\Tests\Fixtures\AnnotatedClasses; use Bezhanov\Silex\Routing\Route; /** * @Route("/foo") */ class FooController { /** * @Route("/bar/{lorem}") */ public function barAction($lorem = 'ipsum') { // ... } }
服务控制器
随着应用程序的增长,你可能会发现自己在使用 Silex 提供的 服务控制器 机制,以便将外部依赖项注入到你的控制器中。在这种情况下,库会为你提供覆盖,因为它允许你通过服务容器直接实例化你的控制器。
<?php // Service Controller definition: $app['foo.bar_baz'] = function ($app) { return new App\Controller\FooController($app['some_other_service']); }; // Controller example: namespace App\Controller; use Bezhanov\Silex\Routing\Route; use Symfony\Component\HttpFoundation\Response; /** * @Route(service="foo.bar_baz") */ class FooController { private $service; public function __construct(SomeOtherService $service) { $this->service = $service; } /** * @Route("/foo") */ public function fooAction() { $result = $this->service->doSomething(); return new Response($result, Response::HTTP_OK); } }
你也可以从你的 @Route 声明中完全省略 service 选项,只要你的服务 ID 与从完全限定的类名(FQCN)派生的 ID 匹配,例如:
<?php $app['app.controller.manufacturer_controller'] = function (Application $app) { return new App\Controller\FooController($app['some_other_service']); };
在此,控制器将通过服务容器自动实例化,你不需要在类级别 @Route 注解中显式指定 service 属性。
贡献
这个库还处于开发的早期阶段。所有贡献都欢迎。在打开 PR 之前,请确保所有测试都通过,并且代码覆盖率令人满意。
phpunit tests --coverage-html coverage