vanio / vanio-web-bundle
Symfony2 Bundle providing some additional features for website development
Installs: 8 181
Dependents: 1
Suggesters: 1
Security: 0
Stars: 0
Watchers: 8
Forks: 1
Open Issues: 2
Type:symfony-bundle
Requires
- php: ^7.0
- html2text/html2text: ^4.0.1
- sensio/framework-extra-bundle: ^3.0 || ^4.0 || ^5.0
- symfony/form: ^3.0
- symfony/security-bundle: ^3.0
- symfony/translation: ^3.0
- symfony/twig-bridge: ^3.0
- twig/twig: ^1.24.1 || ^2.0
- vanio/stdlib: ~0.1
- vanio/type-parser: ^0.1
Requires (Dev)
- dev-master / 0.5.x-dev
- dev-sf3 / 0.5.x-dev
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.0
- dev-sf6
- dev-sf5
- dev-uploaded_file_not_found
- dev-fix_confirm
- dev-name_mapping_fix
- dev-data_attribute
- dev-confirm_show
- dev-popover
- dev-fix_canonization_extension
- dev-regex
- dev-form_choice
- dev-nested_collections
- dev-confirm_event
- dev-form_toggle_with_radio
- dev-ignore_missing_file
- dev-pl_de
- dev-new_languages
- dev-fix_form_choice_type
- dev-configurable_date_picker
- dev-controller_result_listener
- dev-hotfix_max_collection_rows
- dev-preserve_missing_data_exclude_clickable
- dev-persistent_parameters
- dev-preserve_query_array_parameter
- dev-range_slider
- dev-form_choice_for_radio_buttons
- dev-confirm_form_submit
- dev-form_translation_remove_recursion
- dev-collection_widget
- dev-target_path_trait
- dev-toggle
- dev-fix_route_hierarchy_resolver
- dev-form_start_layout
- dev-resolve_locale_on_exception
- dev-is_translated_allows_null
- dev-form_translator_fallback
- dev-pagination_records_on_first_page
- dev-toggle_component
- dev-validation
- dev-fix_validation_token_parser
- dev-custom_prefixes_for_locales
- dev-locales_translations
- dev-menu_fix
This package is auto-updated.
Last update: 2024-10-14 13:17:55 UTC
README
Installation
Installation can be done as usually using composer.
composer require vanio/vanio-web-bundle
Next step is to register this bundle as well as bundles it depends on inside your AppKernel
.
// app/AppKernel.php // ... class AppKernel extends Kernel { // ... public function registerBundles(): array { $bundles = [ // ... new Vanio\UserBundle\VanioWebBundle, ]; // ... } }
Features
Detecting request type
To detect whether current request is master or sub request, special request attribute _request_type
is set.
This logic happens inside Vanio\WebBundle\Request\RequestTypeListener
listener which is not registered by default.
Enable this feature by setting detect_request_type
configuration parameter to true.
Redirecting to Referer
It's quite a common task to redirect user back after certain actions.
This bundle defines a service named vanio_web.request.referer_resolver
which helps you with that.
First it tries to read from _referer
(%vanio_web.referer_parameter%
) query parameter.
When the query parameter is not present then it reads HTTP_REFERER header and tries to match the referring URL against
defined routes. In case of missing header or invalid URL (like URL pointing to a different webpage) fallback path
is used. Since this functionality is mostly used from inside controllers,
it is possible to use Vanio\WebBundle\Request\RefererHelperTrait
which defines one method - redirectToReferer(string $fallbackPath = null): RedirectResponse
.
Flash Messages
Another thing which seems too complicated to me is translating of flash messages.
It's actually very easy but you need a session and a translator.
Two dependencies just to show a translated flash message.
To simplify that there is Vanio\WebBundle\Translation\FlashMessage
value object you can use as an envelope
of the message and pass the message parameters and domain to it. This bundle also replaces translation.extractor.php
service with implementation able to extract messages from FlashMessage
constructor.
$this->addFlash(FlashMessage::TYPE_DANGER, new FlashMessage('message', ['key' => 'value'], 'vanio_web'));
But adding a flash message is just half of the problem. You'll also need to display it somewhere in your view and actually translate it yourself.
Validation of required fields
The required
option normally affects only the HTML5 required
attribute.
This bundle allows setting of validate_required: true
to automatically add a NotBlank
constraint to the form.
The default validation message is configurable by setting required_message
.
Form state URL canonization
Due to SEO optimizations and also in situations where having full form state serialized in URL is too long and ugly it
is possible to set canonize: true
in form options. When you submit the form it is then redirected to canonical URL
where all empty form fields (even those equal to empty_data
option) are ommited.
Templating
Generating class name
Sometimes, even just generating a class name of HTML elements can be cumbersome when it depends on some conditions.
Let's use class_name(array $classes): string
Twig function.
You need to pass it an array where key is a class and value is a boolean value indicating whether this class name should
be present.
Checking whether a text is translated
To check whether text is translated you can use is_translated(string $id, string $locale = null)
Twig
function which checks translator's catalogue. The text is considered as translated when it is present in the catalogue
and the translation does not equal to false.
Determining current menu item
To determine whether a current request matches a menu item, use is_current(string $route): bool
Twig function.
The route is considered current when either _route
request attribute equals to the given route or when request
pathinfo starts with the route path and it's delimited by /
.
Testing whether a given object implements a given type
In Twig, there is no possibility how to determine whether a given object implements a given type.
So, for example, it is not possible to determine whether a flash message is just a string or an instance of the added
FlashMessage
class.
And that's why instance of(string $class)
Twig test was added. You can use it like this:
{{ message is instance of('Vanio\\WebBundle\\Translation\\FlashMessage') ? message.message|trans(message.parameters, message.domain, message.locale) : message }}
Removing values from arrays
Removing certain values from an array is possible using without(array $array, $values)
Twig filter.
Pass it either a value or an array of values to remove and it will return a new array with the given values being unset.
{{ ['foo', 'bar']|without('foo') }}
Removing keys from arrays
Removing certain keys from an array is possible using without(array $array, $keys)
Twig filter.
Pass it either a string or an array of keys to remove and it will return a new array with the given keys being unset.
{{ {foo: 'bar', bar: 'baz'}|without_keys('foo') }}
Removing empty values from arrays
Removing empty values from an array is possible using withoutEmpty(array $array)
Twig filter.
Value is considered empty using the same implementation as empty
Twig test
(''
, false
, null
, []
, or instances of Countable
with zero length).
{{ [null, 1]|without_empty }}
Replacing based on regular expressions
The builtin replace
Twig filter uses strtr
under the hood but there is no support for replacing based on regular
expressions. So we've implemented regexp_replace(string $string, $pattern, $replacement)
filter.
You can pass it either an array with keys as regular expressions and values as replacements or when the replacement
argument is provided then the pattern can be either a string or an array (keys are ignored).
{{ 'foo bar'|regexp_replace({'~foo~': 'baz', '~bar~': 'qux'}) }} {{ 'foo'|regexp_replace('~foo~', 'bar') }} {{ 'foo bar'|regexp_replace(['~foo~', '~bar~'], 'baz') }}
Converting HTML to plaintext
Have you ever created an HTML e-mail? Providing plaintext alternative manually is tedious
so html_to_text(string $html, array $options = []): string
Twig filter is your friend in such cases.
It uses handy html2text library.
Default Configuration
detect_request_type: false referer_fallback_path: / referer_parameter: _referer