PHP code example of acseo / select-autocomplete-bundle
1. Go to this page and download the library: Download acseo/select-autocomplete-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
acseo / select-autocomplete-bundle example snippets
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\User;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => User::class,
// The searchable properties used for query
'properties' => ['profile.firstName', 'profile.lastName'],
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
'properties' => 'targetProperty',
// OR
'properties' => ['name', 'profile.email'],
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
'display' => 'targetPropertyOrMethod',
// OR
'display' => 'nestedProperty.targetProperty',
// OR
'display' => ['user.firstName', 'user.lastName'],
// OR
'display' => function(TargetClass $object): string {
return $object->getTargetProperty();
},
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
'strategy' => 'starts_with', // LIKE ...%
// OR
'strategy' => 'ends_with', // LIKE %...
// OR
'strategy' => 'contains', // LIKE %...%
// OR
'strategy' => 'equals', // = ...
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
'multiple' => true,
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
use Symfony\Component\HttpFoundation\Response;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
// Options values are provided by your serializer (these are default format supported by symfony serializer)
// Format can be override from js by add response_format param in data-autocomplete-url
'format' => 'json', // xml|csv|yaml|...
// OR
// Encode response with your logic
'format' => function (array $normalized, Response $response): Response {
return $response->setContent(json_encode($normalized));
}
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
// Identifier is used as choice value
'identifier' => 'targetPropertyOrMethod',
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
// This option value will be set in data-autocomplete-url of select input attributes
'autocomplete_url' => '/my-custom-entrypoint?param1=kevin',
])
;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
// Don't transform identifiers values to objects
'transformer' => false,
// OR
// Use custom transformer
'transformer' => $myCustomTransformer
])
;
use Acseo\SelectAutocomplete\DataProvider\Doctrine\AbstractDoctrineDataProvider;
use Acseo\SelectAutocomplete\Form\Type\AutocompleteType;
use App\Entity\TargetClass;
$formBuilder
->add('example', AutocompleteType::class, [
'class' => TargetClass::class,
// Override provider on search action to retrieve custom collection (Usage of partial query is allowed)
// The second argument is the default provider which supports the model class
'provider' => function(string $terms, AbstractDoctrineDataProvider $provider) {
return $provider->getRepository(TargetClass::class)
->createQueryBuilder('o')
->where('o.name LIKE :name')
->setParameter('name', $terms.'%')
->getQuery()
->getResult()
;
// You can also just override default query (available with ORM & ODM Doctrine providers)
//
// if ($provider instanceof ORMDataProvider) {
// $qb = $provider->createSearchQueryBuilder('o', TargetClass::class, ['name'], $terms, 'starts_with');
// // Custom query
// return $qb->getQuery()->getResult();
// }
//
// if ($provider instanceof ODMDataProvider) {
// $qb = $provider->createSearchAggregationBuilder(TargetClass::class, ['name'], $terms, 'starts_with');
// // Custom query
// return $qb->execute()->toArray();
// }
},
// OR
// Use your own provider object
'provider' => $myProvider,
// OR
// You can specify provider to use (the service has to be tagged as acseo_select_autocomplete.data_provider).
// 2 providers are
namespace App\Form\Autocomplete\DataProvider;
use Acseo\SelectAutocomplete\DataProvider\DataProviderInterface;
class CustomDataProvider implements DataProviderInterface
{
private $manager;
public function __construct(\SomeWhere\CustomManager $manager)
{
$this->manager = $manager;
}
/**
* Does provider supports the model class.
*/
public function supports(string $class): bool
{
return $this->manager->supports($class);
// To make specific provider for specific model class
// return $class === \App\Entity\Foo::class
}
/**
* Used to retrieve object with form view data (reverseTransform).
*/
public function findByIds(string $class, string $identifier, array $ids): array
{
return $this->manager->findOneBy([ $identifier => $ids ]);
}
/**
* Find collection results of autocomplete action.
*/
public function findByTerms(string $class, array $properties, string $terms, string $strategy): array
{
$qb = $this->manager->createQuery($class);
switch ($strategy) {
case 'contains':
$qb->contains($properties, $terms);
break;
// ... Rest of strategies code
}
return $qb->limit(20)->exec();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.