A Symfony2 bundle that integrates Select2 as a drop-in replacement for a standard entity field on a Symfony form.

Overview

select2entity-bundle

Introduction

This is a Symfony bundle which enables the popular Select2 component to be used as a drop-in replacement for a standard entity field on a Symfony form.

It works with Symfony 4 and 5. For Symfony 2 and 3, please use version or 2.x of the bundle. For Select2 4.0 and above. For older versions, use version 1.x of the bundle (not compatible with Symfony 5).

The main feature that this bundle provides compared with the standard Symfony entity field (rendered with a html select) is that the list is retrieved via a remote ajax call. This means that the list can be of almost unlimited size. The only limitation is the performance of the database query or whatever that retrieves the data in the remote web service.

It works with both single and multiple selections. If the form is editing a Symfony entity then these modes correspond with many to one and many to many relationships. In multiple mode, most people find the Select2 user interface easier to use than a standard select tag with multiple=true with involves awkward use of the ctrl key etc.

The project was inspired by lifo/typeahead-bundle which uses the Typeahead component in Bootstrap 2 to provide similar functionality. Select2Entity can be used anywhere Select2 can be installed, including Bootstrap 3.

Thanks to @ismailbaskin we now have Select2 version 4 compatibility.

Screenshots

This is a form with a single selection field list expanded.

Single select example

This is a form with a multiple selection field list expanded.

Multiple select example

Installation

Select2 must be installed and working first. I hope to setup a demo site but my setup is basically BraincraftedBootstrapBundle with Select2 installed for Bootstrap 3. Once the Braincrafted bundle is working, the only files I've needed to install are:

select2.js, select2.css from https://github.com/select2/select2/tree/4.0.0

select2-bootstrap.css from https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3. That gets it working for Bootstrap 3.

These files live in the Resources/public/js and Resources/public/css folders of one of my bundles and then included in my main layout.html.twig file.

Alternatively, minified versions of select2.js and select2.css can be loaded from the CloudFlare CDN using the two lines of code given here: https://select2.github.io. Make sure the script tag comes after where jQuery is loaded. That might be in the page footer.

  • Add tetranz/select2entity-bundle to your projects composer.json "requires" section:
{
    // ...
    "require": {
        // ...
        "tetranz/select2entity-bundle": "2.*"
    }
}

Note that this only works with Select2 version 4. If you are using Select2 version 3.X please use "tetranz/select2entity-bundle": "1.*" in composer.json

  • Run php composer.phar update tetranz/select2entity-bundle in your project root.
  • Update your project config/bundles.php file and add this bundle to the $bundles array:
$bundles = [
    // ...
    Tetranz\Select2EntityBundle\TetranzSelect2EntityBundle::class => ['all' => true]
];
  • Update your project config/packages/twig.yaml file to provide global twig form templates:
twig:
    form_themes:
        - '@TetranzSelect2Entity/Form/fields.html.twig'

* Load the Javascript on the page. The simplest way is to add the following to your layout file. Don't forget to run console assets:install. Alternatively, do something more sophisticated with Assetic.
">

How to use

The following is for Symfony 4. See https://github.com/tetranz/select2entity-bundle/tree/v2.1 for Symfony 2/3 configuration and use.

Select2Entity is simple to use. In the buildForm method of a form type class, specify Select2EntityType::class as the type where you would otherwise use entity:class.

Here's an example:

$builder
   ->add('country', Select2EntityType::class, [
            'multiple' => true,
            'remote_route' => 'tetranz_test_default_countryquery',
            'remote_params' => [], // static route parameters for request->query
            'class' => '\Tetranz\TestBundle\Entity\Country',
            'primary_key' => 'id',
            'text_property' => 'name',
            'minimum_input_length' => 2,
            'page_limit' => 10,
            'allow_clear' => true,
            'delay' => 250,
            'cache' => true,
            'cache_timeout' => 60000, // if 'cache' is true
            'language' => 'en',
            'placeholder' => 'Select a country',
            'query_parameters' => [
                'start' => new \DateTime(),
                'end' => (new \DateTime())->modify('+5d'),
                // any other parameters you want your ajax route request->query to get, that you might want to modify dynamically
            ],
            // 'object_manager' => $objectManager, // inject a custom object / entity manager 
        ])

Put this at the top of the file with the form type class:

use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;

Options

Defaults will be used for some if not set.

  • class is your entity class. Required
  • primary_key is the name of the property used to uniquely identify entities. Defaults to 'id'
  • text_property This is the entity property used to retrieve the text for existing data. If text_property is omitted then the entity is cast to a string. This requires it to have a __toString() method.
  • multiple True for multiple select (many to many). False for single (many to one) select.
  • minimum_input_length is the number of keys you need to hit before the search will happen. Defaults to 2.
  • page_limit This is passed as a query parameter to the remote call. It is intended to be used to limit size of the list returned. Defaults to 10.
  • scroll True will enable infinite scrolling. Defaults to false.
  • allow_clear True will cause Select2 to display a small x for clearing the value. Defaults to false.
  • allow_add Is an option array for the add tags settings of Select2. Only available when 'multiple' is true on form.
    • enabled Enables the allow new tags option. True or False. Default False.
    • new_tag_text The text that is displayed behind entities that don't exist if allow_add is true. Default is " (NEW)".
    • new_tag_prefix The prefix identifier for new tags, default is "__". Your real values must not contain these symbols in the beginning.
    • tag_separators A javascript array of delimiters to auto split the tags with.
  • delay The delay in milliseconds after a keystroke before trigging another AJAX request. Defaults to 250 ms.
  • placeholder Placeholder text.
  • language i18n language code. Defaults to en.
  • theme Defaults to 'default'.
  • cache Enable AJAX cache. Results will be cached for each 'term' queried.
  • cache_timeout How long to cache a query in milliseconds. Setting to 0 will cause the cache to never timeout (60000 = 60 seconds)
  • transformer The fully qualified class name of a custom transformer if you need that flexibility as described below.
  • autostart Determines whether or not the select2 jQuery code is called automatically on document ready. Defaults to true which provides normal operation.
  • width Sets a data-width attribute if not null. Defaults to null.
  • class_type Optional value that will be added to the ajax request as a query string parameter.
  • render_html This will render your results returned under ['html'].

The url of the remote query can be given by either of two ways: remote_route is the Symfony route. remote_params can be optionally specified to provide parameters. Alternatively, remote_path can be used to specify the url directly.

You may use query_parameters for when those remote_params have to be changeable dynamically. You may change them using $('#elem').data('query-parameters', { /* new params */ });

The defaults can be changed in your config/packages/tetranzselect2entity.yaml file with the following format.

tetranz_select2_entity:
    minimum_input_length: 2
    page_limit: 8
    allow_clear: true
    delay: 500
    language: 'fr'
    theme: 'default'
    cache: false
    cache_timeout: 0
    scroll: true
    object_manager: 'manager_alias'
    render_html: true

AJAX Response

The controller should return a JSON array in the following format. The properties must be id and text.

[
  { id: 1, text: 'Displayed Text 1' },
  { id: 2, text: 'Displayed Text 2' }
]

Infinite Scrolling

If your results are being paged via the Select2 "infinite scrolling" feature then you can either continue to return the same array as shown above (for Backwards Compatibility this bundle will automatically try to determine if more results are needed), or you can return an object shown below to have finer control over the paged results.

The more field should be true if there are more results to be loaded.

{
  results: [
     { id: 1, text: 'Displayed Text 1' },
     { id: 2, text: 'Displayed Text 2' }
  ],
  more: true
}

Your controller action that fetches the results will receive a parameter page indicating what page of results should be loaded. If you set scroll to true then you must handle the page parameter in the query. Weird things will happen if you don't.

Custom option text

If you need more flexibility in what you display as the text for each option, such as displaying the values of several fields from your entity or showing an image inside, you may define your own custom transformer. Your transformer must implement DataTransformerInterface. The easiest way is probably to extend EntityToPropertyTransformer or EntitiesToPropertyTransformer and redefine the transform() method. This way you can return as text anything you want, not just one entity property.

Here's an example that returns the country name and continent (two different properties in the Country entity):

$builder
    ->add('country', Select2EntityType::class, [
        'multiple' => true,
        'remote_route' => 'tetranz_test_default_countryquery',
        'class' => '\Tetranz\TestBundle\Entity\Country',
        'transformer' => '\Tetranz\TestBundle\Form\DataTransformer\CountryEntitiesToPropertyTransformer',
    ]);

In transform sets data array like this:

$data[] = array(
    'id' => $country->getId(),
    'text' => $country->getName().' ('.$country->getContinent()->getName().')',
);

Your custom transformer and respectively your Ajax controller should return an array in the following format:

[ 
    { id: 1, text: 'United Kingdom (Europe)' },
    { id: 1, text: 'China (Asia)' }
]

If you are using the allow_add option and your entity requires other fields besides the text_property field to be valid, you will either need to extend the EntitiesToPropertyTransformer to add the missing field, create a doctrine prePersist listener, or add the missing data in the form view after submit before saving.

Add New Tags

If you want to be able to create new entities through Select2 tags, you can enable it using the allow_add set of options.

For example:

$builder
    ->add('tags', Select2EntityType::class, [
        'remote_route' => 'tetranz_test_tags',
        'class' => '\Tetranz\TestBundle\Entity\PostTags',
        'text_property' => 'name',
        'multiple' => true,
        'allow_add' => [
            'enabled' => true,
            'new_tag_text' => ' (NEW)',
            'new_tag_prefix' => '__',
            'tag_separators' => '[",", " "]'
        ],
    ]);

A few things to keep in mind when adding tags:

  • Your data should not have any chance of matching the first characters with the new_tag_prefix. If there is a chance, change it to something else like '**' or '$$'.
  • tag_separators is the same as the Select2 option. It should be a javascript array.
  • If the entity you are wanting to allow_add has any other required fields aside from the one specified in text_property, you must either add them in the form submit or add prePersist hooks to the doctrine entity.
  • If you are using the "tags" to allow the creation of new entities through a single entry mode, keep in mind you need to remove the Space as a separator or you won't be able to input a space character in this entity.
$builder
    ->add('tags', Select2EntityType::class, [
        ...
        'allow_add' => [
            ...
            'tag_separators' => '[",", ""]' // No Space here
        ],
    ]);

Including other field values in request

If you need to include other field values because the selection depends on it you can add the req_params option. The key is the name of the parameter in the query string, the value is the path in the FormView (if you don't know the path you can do something like {{ dump(form) }} in your template.)

The property option refers to your entity field which is used for the label as well as for the search term.

In the callback you get the QueryBuilder to modify the result query and the data object as parameter (data can be a simple Request object or a plain array. See AutocompleteService.php for more details).

$builder
    ->add('firstName', TextType::class)
        ->add('lastName', TextType::class)
        ->add('state', EntityType::class, array('class' => State::class))
        ->add('county', Select2EntityType::class, [
            'required' => true,
            'multiple' => false,
            'remote_route' => 'ajax_autocomplete',
            'class' => County::class,
            'minimum_input_length' => 0,
            'page_limit' => 10,
            'scroll' => true,
            'allow_clear' => false,
            'req_params' => ['state' => 'parent.children[state]'],
            'property' => 'name',
            'callback'    => function (QueryBuilder $qb, $data) {
                $qb->andWhere('e.state = :state');

                if ($data instanceof Request) {
                    $qb->setParameter('state', $data->get('state'));
                } else {
                    $qb->setParameter('state', $data['state']);
                }

            },
        ])
    ->add('city', Select2EntityType::class, [
        'required' => true,
        'multiple' => false,
        'remote_route' => 'ajax_autocomplete',
        'class' => City::class,
        'minimum_input_length' => 0,
        'page_limit' => 10,
        'scroll' => true,
        'allow_clear' => false,
        'req_params' => ['county' => 'parent.children[county]'],
        'property' => 'name',
        'callback'    => function (QueryBuilder $qb, $data) {
            $qb->andWhere('e.county = :county');

            if ($data instanceof Request) {
                $qb->setParameter('county', $data->get('county'));
            } else {
                $qb->setParameter('county', $data['county']);
            }

        },
    ]);

Because the handling of requests is usually very similar you can use a service which helps you with your results. To use it just add a route in one of your controllers:

get('tetranz_select2entity.autocomplete_service'); $result = $as->getAutocompleteResults($request, YourFormType::class); return new JsonResponse($result); }">
    /**
     * @param Request $request
     *
     * @Route("/autocomplete", name="ajax_autocomplete")
     *
     * @return Response
     */
    public function autocompleteAction(Request $request)
    {
        // Check security etc. if needed
    
        $as = $this->get('tetranz_select2entity.autocomplete_service');

        $result = $as->getAutocompleteResults($request, YourFormType::class);

        return new JsonResponse($result);
    }

Templating

General templating has now been added to the bundle. If you need to render html code inside your selection results, set the render_html option to true and in your controller return data like this:

' }, { id: 2, text: 'China (Asia)', html: ' ' } ]">
[ 
    { id: 1, text: 'United Kingdom (Europe)', html: '' },
    { id: 2, text: 'China (Asia)', html: '' }
]
If you need further templating, you'll need to override the .select2entity() method as follows. If you need [Templating](https://select2.org/dropdown#templating) in Select2, you could consider the following example that shows the country flag next to each option.

Your custom transformer should return data like this:

[ 
    { id: 1, text: 'United Kingdom (Europe)', img: 'images/flags/en.png' },
    { id: 2, text: 'China (Asia)', img: 'images/flags/ch.png' }
]

You need to define your own JavaScript function select2entityAjax which extends the original one select2entity and display custom template with image:

' + item.text + '' ); }; this.select2entity($.extend(action, { templateResult: template, templateSelection: template })); return this; }; $('.select2entity').select2entityAjax();">
$.fn.select2entityAjax = function(action) {
    var action = action || {};
    var template = function (item) {
        var img = item.img || null;
        if (!img) {
            if (item.element && item.element.dataset.img) {
                img = item.element.dataset.img;
            } else {
                return item.text;
            }
        }
        return $(
            '+ img + '" class="img-circle img-sm"> ' + item.text + ''
        );
    };
    this.select2entity($.extend(action, {
        templateResult: template,
        templateSelection: template
    }));
    return this;
};
$('.select2entity').select2entityAjax();

This script will add the functionality globally for all elements with class select2entity, but if the img is not passed it will work as the original select2entity. You should add a 'autostart' => false to form to run properly JS code.

    ->add('contry', Select2EntityType::class, [
        'remote_route' => 'country_select2_query',
        'autostart' => false,
    ])

You also will need to override the following block in your template:

{{ label.text }} {% endblock %}">
{% block tetranz_select2entity_widget_select_option %}
    <option value="{{ label.id }}" selected="selected"
            {% for key, data in label %}
                {% if key not in ['id', 'text'] %} data-{{ key }}="{{ data }}"{% endif %}
            {% endfor %}>
        {{ label.text }}
    option>
{% endblock %}

This block adds all additional data needed to the JavaScript function select2entityAjax, like data attribute. In this case we are passing data-img.

Themes

Select2 supports custom themes using the theme option so you can style Select2 to match the rest of your application. For Bootstrap4 theme look at https://github.com/ttskch/select2-bootstrap4-theme

Embed Collection Forms

If you use Embedded Collection Forms and data-prototype to add new elements in your form, you will need the following JavaScript that will listen for adding an element .select2entity:

$('body').on('click', '[data-prototype]', function(e) {
    $(this).prev().find('.select2entity').last().select2entity();
});
Comments
  • Local value support (Non Ajax local choices)

    Local value support (Non Ajax local choices)

    New Feature: Support of non Ajax field type

    This PR is linked to the Feature Request #23. I give it a try and it seems to work OK in my current project. Please note this PR is based on my previous one adding "tag: support for single entity (#67).

    Let me know if you need anything else. I hope you will have time to merge these requests soon as I am getting further away from your base code, and would like to avoid maintaining a separate branch :)

    PS: Any comments on the code are welcome

    opened by Schyzophrenic 19
  • Not working with functional tests

    Not working with functional tests

    I'd like to run functional tests and submit a form with this field, but I get the following error:

    InvalidArgumentException: Input "my_select2_field" cannot take "1" as a value (possible values: ).
    

    Any ideas?

    opened by binarious 15
  • select2 is not working for me in symfony2.7

    select2 is not working for me in symfony2.7

    Below is the form when i remove the tetranz_select2entity this is working. i have check json url in separate url it also woking fine. every time an error displayed PropertyAccessor requires a graph of objects or arrays to operate on i try to resolve the problem but failed i check EntityToPropertyTransformer class and print the entity it return 0. following is the Formtype $builder->add('outletid', 'entity', array( 'multiple' => false, #'remote_route' => 'admin_notification_outletjson', 'class' => 'Application\FreemonyBundle\Entity\Outlet', // 'text_property' => 'email', // 'minimum_input_length' => 2, // 'page_limit' => 10, 'placeholder' => 'Select a country', ));

    opened by manoj815 10
  • Allow extra parameters to be sent with the query

    Allow extra parameters to be sent with the query

    This should also get rid of all deprecations and clean up the code a bit. It breaks backwards compatibility and is therefore only for a new major version of the bundle.

    opened by DubbleClick 9
  • Documentation for Adding a new entity

    Documentation for Adding a new entity

    I'm following the instructions on how to add a new element, but am getting an error.

    // In the form builder
                    'allow_add' => [
                        'enabled' => true,
                        'new_tag_text' => ' (NEW)',
                        'new_tag_prefix' => '__',
                        'tag_separators' => '[";", "]'
                    ],
    

    Now instead of returning an array of objects of my class, it returns an array that includes strings. The new_tag_text and prefix don't seem to be doing anything, at least not when I'm looking at what's submitted in the form.

    I can intercept the text and create the new elements, but even when I do that, the $values array passed to the transform service includes the strings. So it fails during the SQL, when it's trying to look up the objects by their id's, e.g.

    FROM tag t0_ WHERE t0_.id IN (?, ?)' with params ["ABC IS A NEW ELEMENT", "3"]:
    

    So I'm missing some critical step, where the new string is inserted into the database and gets an id.

    Are there any examples? I see there's a reference to a PrePersist Listener, but not sure how to implement that.

    Thanks.

    opened by tacman 9
  • Implemented/Fixed infinite scrolling support.

    Implemented/Fixed infinite scrolling support.

    Infinite scrolling now works.

    In order for a user to support this they must act on the Select2 page parameter that is automatically sent in each request (except the first request). For example:

    public function lookupAction(Request $request)
      $query = $request->query->get('q');
      $limit = $request->query->get('page_limit');  
      $page = $request->query->get('page') ?: 1;
      $offset = ($page - 1) * $limit;
      $results = $repo->createQuerybuilder('a')
        ->setFirstResult($offset)
        ->setMaxResults($limit)
        ->where('...')
        ->getQuery()
        ->getResult();
    

    No BC breaks

    opened by lifo101 7
  • Custom transformer functionality

    Custom transformer functionality

    • Adding custom transformer functionality allowing to have custom text that can display more than one entity property.
    • Adding support for custom templates for the option text, which allows for adding option images.
    • Updated README with the new additions.
    opened by tmisheva 7
  • Having an options error

    Having an options error

    Followed all the install instructions and i'm receiving the following error when loading my form:

    The options "class", "minimum_input_length", "multiple", "page_limit", "placeholder", "remote_route", "text_property" do not exist. Known options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual" 
    

    Any advice on this?

    Symfony version 2.5.10 Debug info:

    CRITICAL - Uncaught PHP Exception Symfony\Component\OptionsResolver\Exception\InvalidOptionsException: "The options "class", "minimum_input_length", "multiple", "page_limit", "placeholder", "remote_route", "text_property" do not exist. Known options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual"" at /Users/Steve/Sites/NavioHealth/patient-app-web/vendor/symfony/symfony/src/Symfony/Component/OptionsResolver/OptionsResolver.php line 260 Context: {"exception":"Object(Symfony\Component\OptionsResolver\Exception\InvalidOptionsException)"}

    opened by steve-goodwin 7
  • Unable to re submit the form if the the select allows (and contains) a new entry

    Unable to re submit the form if the the select allows (and contains) a new entry

    Hi,

    When adding a Select2EntityType field with allow_add option enabled.

    If we add a new value:

    When we submit the form for the first time, the select value is submitted with the new_tag_prefix Ex: __myvalue

    But if the form submission fails, the select is refilled without the new_tag_prefix. So the submitted value will be myvalue insteaf of __myvalue.

    So the form submission will fails because Select2Entity is not able to know that this is a new value submitted.

    Is it bug or maybe I have missed something in the configuration?

    I can solve this by persisting the new added entity on form submit even if the submission fails. But I wish to persist it only if the form submission is valid.

    Seb

    opened by Seb33300 6
  • Append empty option if allow_clear set to true - required by select2.js

    Append empty option if allow_clear set to true - required by select2.js

    opened by mnowaczyk 6
  • Foreign Entity with invalid value causes sql error

    Foreign Entity with invalid value causes sql error

    There is a bug with foreign entity. I have a form Book, that has field author_id. Author id is taken from users.id. If I submit integer values, then all is fine. But when I submit text instead of integer id, I get doctrine exception Uncaught PHP Exception Doctrine\DBAL\Exception\DriverException: "An exception occurred while executing 'SELECT t0.id AS id_1, t0.firstname AS firstname_2 FROM users t0 WHERE t0.id = ?' with params ["test"]

    The default Symfony Form Entity is working fine, it returns This value is not valid. error

    opened by miholeus 6
  • Prefill select on form load wich remote_route

    Prefill select on form load wich remote_route

    Hello, i have a select2 and i want to avoid force remote ajax request when the list of item is small. there is a solution to prefill the select2 with a default list of item on form load/render for select wich opetion remote_route

    Thanks

    opened by Legenyes 0
  • Initialize error javascript

    Initialize error javascript

    When I initialize my select2 field, i have a JS error : $s2.select2 is not a function I'm using "tetranz/select2entity-bundle": "^3.1" and I have executed bin/console assets:install

    I add this line in my javascript block :

    <script src="{{ asset('bundles/tetranzselect2entity/js/select2entity.js') }}"></script>
    

    And this is my form class :

    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('zone', Select2EntityType::class, [
                    'class' => Zone::class,
                    'primary_key' => 'id',
                    'text_property' => 'name',
                    'multiple' => true,
                    'allow_clear' => true,
                    'language' => 'fr',
                    'remote_route' => 'folder_select2_zone',
                ]);
        }
    

    I don't think it's related but this is my route 'folder_select2_zone' :

         /**
         * @Route("/folder/select2_zone", name="folder_select2_zone")
         */
        public function select2Zone()
        {
            return new JsonResponse([
                [
                    'id' => 1,
                    'name' => 'toto'
                ]
            ]);
        }
    
    opened by Saikurin 0
  • Note from the maintainer of this project.

    Note from the maintainer of this project.

    Hi all

    It's me, the maintainer of this project.

    I hate to say this but despite my brief burst of enthusiasm about two and a half years ago that didn't amount to much, I really need to be honest and say that I no longer have the bandwidth or motivation to maintain this project. The reality of life and the fact that it's not relevant to my work these days means that I need to face this fact and not mislead anyone. I'm not setup validate the latest PRs.

    I thank everyone for their continuing efforts. I feel bad every time I see a new PR.

    So ... what to do? I guess there are only two options that I can take to help things continue in some way.

    I haven't been following forks but if there is clear winner among forks or even a small number, I'm happy to link to them prominently in the readme.

    If someone really wants to volunteer to take over as maintainer then I guess I can add them as a collaborator. I don't know how I would realistically vet anyone but if you want to volunteer then please send me an email to tetranz at gmail.com. I'll give preference to someone who has already contributed here or at least can point to other open source projects they've worked on.

    Thanks again and I'm sorry it's come to this but I guess it's not an uncommon situation in the open source world.

    opened by tetranz 7
  • feat: bump php to =7.4", use new language features of 7.4">

    feat: bump php to ">=7.4", use new language features of 7.4

    Superseeds https://github.com/tetranz/select2entity-bundle/pull/184

    Only < 6 % use php < 7.4 https://packagist.org/packages/tetranz/select2entity-bundle/php-stats#3.1

    I think the suggested way from @Knallcharge is a good idea. https://github.com/tetranz/select2entity-bundle/pull/184#issuecomment-1058929143

    opened by Chris53897 0
  • feat: bump php to =7.2.5", use new language features of 7.2">

    feat: bump php to ">=7.2.5", use new language features of 7.2

    Usage stats of 3.1 show 0.x% for php 7.1 https://packagist.org/packages/tetranz/select2entity-bundle/php-stats#3.1

    Should be >= 7.4 (but that would exclude 8% of users to upgrade). So i am not sure if it alreday time for this. WDYT?

    https://github.com/tetranz/select2entity-bundle/pull/183

    opened by Chris53897 1
Releases(v3.1.0)
Owner
Ross Keatinge
Ross Keatinge
Bundle providing Honeypot field for the Form Builder in Ibexa DXP Experience/Commerce (3.X)

IbexaHoneypot Bundle providing Honeypot field for the Form Builder in Ibexa DXP Experience/Commerce (3.X) What is Honey pot? A honey pot trap involves

null 1 Oct 14, 2021
This module integrates Silverstripe CMS with Google Translate API and then allows content editors to use automatic translation for every translatable field.

Autotranslate This module integrates Silverstripe CMS with Google Translate API and then allows content editors to use automatic translation for every

null 4 Jan 3, 2022
A drop-in replacement for the Magento 2 checkout.

Clean Checkout for Magento 2 A drop-in replacement for the Magento 2 checkout. Features Modules The project is divided into several modules: Overall c

Daniel Sloof 275 Sep 14, 2022
A faster drop in replacement for bin/magento cache:clean with file watcher

"You know, hope is a mistake. If you can't fix what's broken, you'll, uh... you'll go insane." - Max Rockatansky Magento 2 Cache Clean A faster drop i

mage2tv 460 Dec 26, 2022
Laravel style FormRequests for Symfony; inspired by adamsafr/form-request-bundle

Somnambulist Form Request Bundle An implementation of form requests from Laravel for Symfony based on the original work by Adam Sapraliev. Requirement

Somnambulist Tech 1 Dec 14, 2021
Coding-standard - Magento PHP CodeSniffer Coding Standard

ECG Magento Code Sniffer Coding Standard ECG Magento Code Sniffer Coding Standard is a set of rules and sniffs for PHP_CodeSniffer tool. It allows aut

Magento ECG 309 Jan 3, 2023
Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Indatus 197 Dec 30, 2022
A Symfony Feature Flag Bundle which easily allows you to configure and use your favorite feature flag provider.

Metro Markets FF Metro Markets FF is a Feature Flag Symfony Bundle. It easily allows you to configure and use your favorite feature flag provider. Ins

METRO Markets 14 May 23, 2022
A Symfony bundle built to schedule/consume repetitive tasks

Daily runs Code style Infection PHPUnit Rector Security Static analysis A Symfony bundle built to schedule/consume repetitive tasks Main features Exte

Guillaume Loulier 98 Jan 4, 2023
Tabler.io bundle for Symfony - a backend/admin theme for easy integration

Tabler Bundle for Symfony This repository contains a Symfony bundle, integrating the fantastic Tabler.io HTML Template into your Symfony project. It s

Kevin Papst 22 Jan 2, 2023
Symfony bundle for class/method memoization

Symfony service memoization bundle This bundle provides memoization for your services - every time you call the same method with the same arguments a

Dominik Chrástecký 16 Oct 31, 2022
Symfony Bundle to create HTML tables with bootstrap-table for Doctrine Entities.

HelloBootstrapTableBundle This Bundle provides simple bootstrap-table configuration for your Doctrine Entities. Used bootstrap-table version 1.18.3. I

Sebastian B 7 Nov 3, 2022
RSQueue Bundle for Symfony

RSQueueBundle for Symfony Simple queuing system based on Redis Table of contents Installing/Configuring Tags Installing Redis Installing PHPRedis Inst

RSQueue 11 Oct 8, 2018
🕧 Provides an scheduler bundle for symfony framework.

?? PHP Scheduler Bundle Provides the integration of the PHP Scheduler library into Symfony Framework. Installation Run composer require flexic/schedul

FlexicSystems 3 Nov 15, 2022
This is a replacement dashboard for the Pisces Helium Miner

Pisces QoL Dashboard This is a replacement dashboard for the Pisces Helium Miner. The dashboard that ships with the Pisces P100 has a number of securi

null 42 Jun 16, 2022
Much improved replacement for Zend_Cache_Backend_File - works great with Magento!

Cm_Cache_Backend_File The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the n

Colin Mollenhour 146 Aug 22, 2022
Easily create WooCommerce replacement orders for your customers.

Support Orders for WooCommerce Requires PHP: 7.0 WP requires at least: 5.7 WP tested up to: 5.7 WC requires at least: 5.6.0 WC tested up to: 5.8.0 Sta

DevPress 5 Feb 24, 2022
A replacement for Octoprint's UI and for multiple printers.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Andy Newhouse 1 Jan 19, 2022
A powerful and pretty replacement for PHP's var_export()

Brick\VarExporter A powerful and pretty replacement for PHP's var_export(). Introduction PHP's var_export() function is a handy way to export a variab

Brick 145 Dec 23, 2022