X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/f86a3843cac9cddecd718697c8ce401fa6637dc3..47fb9009ea1dcd97ccbca1b787124407057d4c0a:/README.md diff --git a/README.md b/README.md index 3f3ab87..e51fc22 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +Contribute +========== + +You may buy me a Beer, a Tea or help with Server fees with a paypal donation to +the address . + +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 ============ @@ -8,27 +20,34 @@ Add bundle custom repository to your project's `composer.json` file: ```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" + } + } + } + ], + ... } ``` @@ -66,48 +85,128 @@ in the `app/AppKernel.php` file of your project: // ... 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 ``` -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 @@ -115,7 +214,8 @@ $ php 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 @@ -169,15 +269,14 @@ You can create you own mypackfilter class which call a mypack binary: ```php fileName = $fileName; @@ -200,7 +299,7 @@ class MyPackFilter implements FilterInterface { } //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'), @@ -211,7 +310,7 @@ class MyPackFilter implements FilterInterface { //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); @@ -247,4 +346,4 @@ class MyPackFilter implements FilterInterface { } ``` -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.