+Contribute
+==========
+
+You may buy me a Beer, a Tea or help with Server fees with a paypal donation to
+the address <paypal@rapsys.eu>.
+
+Don't forget to show your love for this project, feel free to report bugs to
+the author, issues which are security relevant should be disclosed privately
+first.
+
+Patches are welcomed and grant credit when requested.
+
Installation
============
```json
{
- ...,
- "repositories": [
- {
- "type": "package",
- "package": {
- "name": "rapsys/packbundle",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://git.rapsys.eu/packbundle",
- "reference": "master"
- },
- "autoload": {
- "psr-4": {
- "Rapsys\\PackBundle\\": ""
- }
- }
- }
- }
- ],
- ...
+ ...,
+ "repositories": [
+ {
+ "type": "package",
+ "package": {
+ "name": "rapsys/packbundle",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://git.rapsys.eu/packbundle",
+ "reference": "master"
+ },
+ "autoload": {
+ "psr-4": {
+ "Rapsys\\PackBundle\\": ""
+ }
+ },
+ "require": {
+ "symfony/asset": "^4.0|^5.0|^6.0|^7.0",
+ "symfony/flex": "^1.0|^2.0",
+ "symfony/framework-bundle": "^4.0|^5.0|^6.0|^7.0",
+ "symfony/process": "^4.0|^5.0|^6.0|^7.0",
+ "symfony/twig-bundle": "^4.0|^5.0|^6.0|^7.0"
+ }
+ }
+ }
+ ],
+ ...
}
```
// ...
class AppKernel extends Kernel
{
- public function registerBundles()
- {
- $bundles = array(
- // ...
- new Rapsys\PackBundle\RapsysPackBundle(),
- );
+ public function registerBundles()
+ {
+ $bundles = array(
+ // ...
+ new Rapsys\PackBundle\RapsysPackBundle(),
+ );
- // ...
- }
+ // ...
+ }
- // ...
+ // ...
}
```
### Step 3: Configure the Bundle
-Verify that you have the configuration file `config/packages/rapsys_pack.yaml`
-with the following content:
+Setup configuration file `config/packages/rapsys_pack.yaml` with the following
+content available in `Resources/config/packages/rapsys_pack.yaml`:
```yaml
#Services configuration
services:
+ #Replace assets.packages definition
+ assets.packages:
+ class: 'Symfony\Component\Asset\Packages'
+ arguments: [ '@rapsys_pack.path_package' ]
+ #Replace assets.context definition
+ assets.context:
+ class: 'Rapsys\PackBundle\Context\RequestStackContext'
+ arguments: [ '@request_stack', '%asset.request_context.base_path%', '%asset.request_context.secure%' ]
#Register assets pack package
- assets.pack_package:
- class: Rapsys\PackBundle\Asset\PathPackage
+ rapsys_pack.path_package:
+ class: 'Rapsys\PackBundle\Package\PathPackage'
arguments: [ '/', '@assets.empty_version_strategy', '@assets.context' ]
+ public: true
#Register twig pack extension
- rapsys_pack.twig.pack_extension:
- class: Rapsys\PackBundle\Twig\PackExtension
- arguments: [ '@file_locator', '@service_container', '@assets.pack_package' ]
- tags: [ twig.extension ]
+ rapsys_pack.pack_extension:
+ class: 'Rapsys\PackBundle\Extension\PackExtension'
+ arguments: [ '@service_container', '@rapsys_pack.intl_util', '@file_locator', '@rapsys_pack.path_package', '@rapsys_pack.slugger_util' ]
+ tags: [ 'twig.extension' ]
+ #Register intl util service
+ rapsys_pack.intl_util:
+ class: 'Rapsys\PackBundle\Util\IntlUtil'
+ public: true
+ #Register facebook event subscriber
+ Rapsys\PackBundle\Subscriber\FacebookSubscriber:
+ arguments: [ '@router', [] ]
+ tags: [ 'kernel.event_subscriber' ]
+ #Register intl util class alias
+ Rapsys\PackBundle\Util\IntlUtil:
+ alias: 'rapsys_pack.intl_util'
+ #Register facebook util service
+ rapsys_pack.facebook_util:
+ class: 'Rapsys\PackBundle\Util\FacebookUtil'
+ arguments: [ '@router', '%kernel.project_dir%/var/cache', '%rapsys_pack.path%' ]
+ public: true
+ #Register facebook util class alias
+ Rapsys\PackBundle\Util\FacebookUtil:
+ alias: 'rapsys_pack.facebook_util'
+ #Register image util service
+ rapsys_pack.image_util:
+ class: 'Rapsys\PackBundle\Util\ImageUtil'
+ arguments: [ '@router', '@rapsys_pack.slugger_util', '%kernel.project_dir%/var/cache', '%rapsys_pack.path%' ]
+ public: true
+ #Register image util class alias
+ Rapsys\PackBundle\Util\ImageUtil:
+ alias: 'rapsys_pack.image_util'
+ #Register map util service
+ rapsys_pack.map_util:
+ class: 'Rapsys\PackBundle\Util\MapUtil'
+ arguments: [ '@router', '@rapsys_pack.slugger_util' ]
+ public: true
+ #Register map util class alias
+ Rapsys\PackBundle\Util\MapUtil:
+ alias: 'rapsys_pack.map_util'
+ #Register slugger util service
+ rapsys_pack.slugger_util:
+ class: 'Rapsys\PackBundle\Util\SluggerUtil'
+ arguments: [ '%kernel.secret%' ]
+ public: true
+ #Register slugger util class alias
+ Rapsys\PackBundle\Util\SluggerUtil:
+ alias: 'rapsys_pack.slugger_util'
+ #Register image controller
+ Rapsys\PackBundle\Controller\ImageController:
+ arguments: [ '@service_container', '@rapsys_pack.image_util', '@rapsys_pack.slugger_util', '%kernel.project_dir%/var/cache', '%rapsys_pack.path%' ]
+ tags: [ 'controller.service_arguments' ]
+ #Register map controller
+ Rapsys\PackBundle\Controller\MapController:
+ arguments: [ '@service_container', '@rapsys_pack.map_util', '@rapsys_pack.slugger_util', '%kernel.project_dir%/var/cache', '%rapsys_pack.path%' ]
+ tags: [ 'controller.service_arguments' ]
+ Rapsys\PackBundle\Form\CaptchaType:
+ arguments: [ '@rapsys_pack.image_util', '@rapsys_pack.slugger_util', '@translator' ]
+ tags: [ 'form.type' ]
```
-Open a command console, enter your project directory and execute the
-following command to see default bundle configuration:
+Setup configuration file `config/packages/myproject.yaml` with the following
+content available in `Resources/config/packages/rapsys_pack.yaml`:
+
+```yaml
+#Services configuration
+services:
+ #Register facebook event subscriber
+ Rapsys\PackBundle\Subscriber\FacebookSubscriber:
+ arguments: [ '@router', [ 'en', 'en_gb', 'en_us', 'fr', 'fr_fr' ] ]
+ tags: [ 'kernel.event_subscriber' ]
+ #Register facebook util service
+ rapsys_blog.facebook_util:
+ class: 'Rapsys\PackBundle\Util\FacebookUtil'
+ arguments: [ '@router', '%kernel.project_dir%/var/cache', '%rapsys_pack.path%', 'facebook', '%kernel.project_dir%/public/png/facebook.png' ]
+ public: true
+```
+
+Open a command console, enter your project directory and execute the following
+command to see default bundle configuration:
```console
-$ php bin/console config:dump-reference RapsysPackBundle
+$ bin/console config:dump-reference RapsysPackBundle
```
-Open a command console, enter your project directory and execute the
-following command to see current bundle configuration:
+Open a command console, enter your project directory and execute the following
+command to see current bundle configuration:
```console
-$ php bin/console debug:config RapsysPackBundle
+$ bin/console debug:config RapsysPackBundle
```
### Step 4: Use the twig extension in your Template
-You can use a template like this to generate your first `rapsys_pack` enabled template:
+You can use a template like this to generate your first `rapsys_pack` enabled
+template:
```twig
<!DOCTYPE html>
```php
<?php
-namespace Rapsys\PackBundle\Twig\Filter;
+namespace Rapsys\PackBundle\Filter;
-use Rapsys\PackBundle\Twig\Filter\FilterInterface;
use Twig\Error\Error;
//This class will be defined in the parameter rapsys_pack.filters.(css|img|js).[x].class string
class MyPackFilter implements FilterInterface {
- //The constructor arguments ... will be replaced defined in the parameter rapsys_pack.filters.(css|img|js).[x].args array
- public function __construct($fileName, $line, $bin = 'mypack', ...) {
+ //The constructor arguments ... will be replaced with values defined in the parameter rapsys_pack.filters.(css|img|js).[x].args array
+ public function __construct(string $fileName, int $line, string $bin = 'mypack', ...) {
//Set fileName
$this->fileName = $fileName;
}
//Pass merge of all inputs in content
- public function process($content) {
+ public function process(string $content): string {
//Create descriptors
$descriptorSpec = array(
0 => array('pipe', 'r'),
//Open process
if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) {
//Set stderr as non blocking
- stream_set_blocking($pipes[2], 0);
+ stream_set_blocking($pipes[2], false);
//Send content to stdin
fwrite($pipes[0], $content);
}
```
-The class is required to get it's arguments through constructor and have a process method.
+The class must implements FilterInterface and get it's arguments through constructor.