Traté de implementar un autocompletado en campo de texto para drupal 8 en mi módulo personalizado
todo lo que quería era buscar y mostrar el probable título que escribí a través de autocompletar, así que declaré una función pública autocompletar dentro de una clase en DefaultController.php en el directorio de la carpeta -> mymodule / src / Controller / DefaultController.php
<?php
namespace Drupal\mymodule\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\JsonResponse;
class DefaultController extends ControllerBase
{
    public function autocomplete($string)
    {
        $matches = array();
        $db = \Drupal::database();
        $result = $db->select('node_field_data', 'n')
        ->fields('n', array('title', 'nid'))
        ->condition('title', '%'.db_like($string).'%', 'LIKE')
        ->addTag('node_access')
        ->execute();
        foreach ($result as $row) {
            $matches[$row->nid] = check_plain($row->title);
        }
        return new JsonResponse($matches);
    }
}
luego creó un EditForm.php en el directorio de la carpeta -> mymodule / src / Form / EditForm.php
<?php
namespace Drupal\mymodule\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
class EditForm extends FormBase
{
    public function getFormId()
    {
        return 'mymodule_edit_form';
    }
    public function buildForm(array $form, FormStateInterface $form_state)
    {
        $form = array();
  $form['input_fields']['nid'] = array(
    '#type' => 'textfield',
    '#title' => t('Name of the referenced node'),
    '#autocomplete_route_name' => 'mymodule.autocomplete',
    '#description' => t('Node Add/Edit type block'),
    '#default' => ($form_state->isValueEmpty('nid')) ? null : ($form_state->getValue('nid')),
    '#required' => true,
  );
        $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Create'),
  );
        return $form;
    }
}
También creó mymodule.routing.yml
  mymodule.autocomplete:
  path: '/mymodule/autocomplete'
  defaults:
    _controller: '\Drupal\mymodule\Controller\DefaultController::autocomplete'
  requirements:
    _permission: 'access content'
¿Todavía no se implementa la funcionalidad de autocompletar? ¿Alguien puede señalarme qué me estoy perdiendo?

Respuestas:
Su clase necesita alguna modificación, necesita verificar la solicitud y ponerla en $ string.
fuente
\Drupal::entityQuery('node')sería preferible usar aparte de select.z-indexelemento DOM que contenía el formulario. El valor era demasiado alto y superponía los resultados del autocompletado. Bajar mi costumbre loz-indexarregló para mí.Si desea seleccionar una entidad, entonces hay una manera más fácil de hacerlo. Drupal 8 tiene un tipo de campo entidad_autocompleto estándar, solo especifique su elemento de formulario de esta manera:
Consulte Campo personalizado de autocompletar para obtener más información.
Además, nunca haga consultas de bases de datos contra tablas de nodo / entidad. Use \ Drupal :: entityQuery () para eso.
fuente
:
Debe cambiar el código en el controlador. El código está a continuación:
fuente
Use el código @vgoradiya y luego en el bucle foreach inténtelo de esta manera:
fuente