yasiekz / router-bundle
Bundle that provides aviability of generating URL address to objects instead of giving route name and route parameters
Installs: 872
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 1
Open Issues: 2
Type:symfony-bundle
Requires
- symfony/finder: >=2.4
- symfony/framework-bundle: >=2.4
Requires (Dev)
- jakub-onderka/php-parallel-lint: ~0.8
- phpunit/phpunit: ~4.4
This package is not auto-updated.
Last update: 2024-10-26 17:35:00 UTC
README
Bundle that provides aviability of generating URL address to objects instead of giving route name and route parameters
Instalation
Add bundle in your AppKernel.php
$bundles = array(
new Yasiekz\RouterBundle\YasiekzRouterBundle(),
)
Bundle automatically overrides default symfony2 routing service.
Additional Configuration
There is no additional configuration required.
What interface should I use?
We have two interfaces avaiable. The RoutableCmsInterface is useful when you want to have more than one routing per object for example in CMS systems, where you might want to have diffrent routing for edit, delete object. The RoutableFrontInterface is useful for websites when there is only only one routing per object, but one object might have many routes depends on for example category that object belongs. TheRoutableMultiFrontStrategy is combo of both interfaces.
Usage:
RoutableCmsInterface
use Yasiekz\RouterBundle\Service\RoutableCmsInterface;
class YourClass implements RoutableCmsIterface
{
public function getPossibleRoutes()
{
// method should return an array of aviable routes as below
return array(
'destination1' => 'routingName1',
'destination2' => 'routingName2'
);
}
public function getRouterParameters($routeName, $destination = null);
{
// method should return parameters that is necessary to create routing depend on $destination parameter:
return array(
'id' => $this->getId()
);
}
}
The URL is generated as same as default in Symfony2.
From controller:
$object = new YourClass();
$url = $this->generateUrl($object, 'edit');
The example above generates indirect address to object $object for destination 'edit'
From twig:
{{ path(object, 'edit') }}
RoutableFrontInterface
Usage
use Yasiekz\RouterBundle\Service\RoutableFrontInterface;
class YourClass implements RoutableFrontIterface
{
public function getRouteName()
{
// method should return routeName for given object
return 'yourclass_detail';
}
public function getRouterParameters($routeName, $destination = null);
{
// method should return parameters that is necessary to create routing depend on $routeName parameter:
return array(
'id' => $this->getId()
);
}
}
The URL is generated as same as default in symfony2.
From controller:
$object = new YourClass();
$paramers = array(); // here might be additional params which be marged to routing
$url = $this->generateUrl($object, $parameters);
The example above generates indirect address to object $object without transmission any additional params. Will be taken only params from getRouterParameters() method from class YourClass.
From Twig:
{{ path(object, { 'param1': value1, 'param2': value2 }) }}
RoutableMultiFrontInterface
Usage
use Yasiekz\RouterBundle\Service\RoutableMultiFrontInterface;
class YourClass implements RoutableMultiFrontInterface
{
const DESTINATION_ARTICLE = 'article';
public function getRouteName($parameters = array(), $destination = null)
{
// method should return routeName for given object and parameters or destination
if ($destination == self::DESTINATION_ARTICLE) {
return 'yourclass_detail';
}
return 'yourclass_default';
}
public function getRouterParameters($routeName, $destination = null);
{
// method should return parameters that is necessary to create routing depend on $routeName parameter:
return array(
'id' => $this->getId()
);
}
}
The URL is generated as same as default in symfony2.
From controller:
$object = new YourClass();
$parameters = array('destination' => 'article'); // here might be additional params which be marged to routing
$url = $this->generateUrl($object, $parameters);
The example above generates indirect address to object $object with transmission destination param, and merge this param with getRouterParameters() method from class YourClass
From Twig:
{{ path(object, { 'destination': 'article', 'param1': value1, 'param2': value2 }) }}
Important
There is no possibility that the one class implements all interfaces at the same time.
Contrubution
You are highly encouraged to participate in the development. The terms are the same as the symfony2 http://symfony.com/doc/current/contributing/code/patches.html