사용자 정의 모듈에서 drupal 8의 텍스트 필드에 자동 완성을 구현하려고했습니다.
내가 원하는 것은 자동 완성을 통해 입력 한 가능성있는 제목을 가져 와서 표시하는 것이므로 폴더 디렉토리의 DefaultController.php 클래스 내에서 public function autocomplete를 선언했습니다.-> 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);
}
}
그런 다음 폴더 디렉토리에 EditForm.php를 생성했습니다-> 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;
}
}
또한 mymodule.routing.yml을 만들었습니다.
mymodule.autocomplete:
path: '/mymodule/autocomplete'
defaults:
_controller: '\Drupal\mymodule\Controller\DefaultController::autocomplete'
requirements:
_permission: 'access content'
여전히 자동 완성 기능이 구현되지 않습니까? 아무도 내가 잃어버린 것을 지적 할 수 있습니까 ??
당신은 또한 매개 변수를 전달해야 drupal.org/node/2070985
—
SHREYA 셰티
@ShreyaShetty 아니요 d7에서는 '#autocomplete_path'=> 'mymodule / autocomplete'를 사용했기 때문에 매개 변수가 필요하지 않으므로 d8에서는 '#autocomplete_route_name'=> 'mymodule.autocomplete'를 사용하므로 매개 변수를 사용하지 않았습니다.
—
나도