works with plain silex-php
- Register Controller as Service using Annotations
- php >=5.3
- Doctrine Annotations >=1.1
- PHP Parser >=0.9,<1.0
- Saxulum ClassFinder >=1.0
- Symfony Finder Component >=2.3
- Silex >= 1.1
Through Composer as saxulum/saxulum-route-controller-provider.
Add this line after you added the autoload.php
from composer
\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader(
array($loader, 'loadClass')
);
use Saxulum\RouteController\Provider\RouteControllerProvider;
use Silex\Provider\ServiceControllerServiceProvider;
$app->register(new ServiceControllerServiceProvider());
$app->register(new RouteControllerProvider(), array(
'route_controller_cache' => '/path/to/cache/'
));
debug == true
: the cache file will be build at each loaddebug == false
: the cache file will be build if not exists, delete it if its out of sync
probably slower, cause temp dir cleanups
use Saxulum\RouteController\Provider\RouteControllerProvider;
use Silex\Provider\ServiceControllerServiceProvider;
$app->register(new ServiceControllerServiceProvider());
$app->register(new RouteControllerProvider());
debug == true
: the cache file will be build at each loaddebug == false
: the cache file will be build if not exists, delete it if its out of sync
$app['route_controller_paths'] = $app->share(
$app->extend('route_controller_paths', function ($paths) {
$paths[] = '/path/to/the/controllers';
return $paths;
})
);
use Saxulum\RouteController\Annotation\Route;
/**
* @Route("/{_locale}")
*/
use Saxulum\RouteController\Annotation\Callback;
use Saxulum\RouteController\Annotation\Convert;
use Saxulum\RouteController\Annotation\Route;
/**
* @Route("/hello/{name}",
* bind="hello_name",
* asserts={"name"="\w+"},
* values={"name"="world"},
* converters={
* @Convert("name", callback=@Callback("__self:convertName"))
* },
* method="GET",
* requireHttp=false,
* requireHttps=false,
* before={
* @Callback("__self:beforeFirst"),
* @Callback("__self::beforeSecond")
* },
* after={
* @Callback("__self:afterFirst"),
* @Callback("__self::afterSecond")
* }
* )
*/
__self
get replaced by the controller class.__self:beforeFirst
calls the methodbeforeFirst
on the controller instance__self::beforeSecond
calls the static methodbeforeSecond
on the controller
If there is no DI annotation, the controller will be registred without any dependencies as long there is at least one method route annotation.
use Saxulum\RouteController\Annotation\DI;
/**
* @DI(injectContainer=true)
*/
use Saxulum\RouteController\Annotation\DI;
/**
* @DI(serviceIds={"url_generator"})
*/