Drupal 8自定义自动完成错误500

Drupal 8自定义自动完成错误500

问题描述:

任何人都可以帮我解决我做错了什么?服务器返回内部服务器错误500.它看起来我无法获得控制器。任何人都可以解释我的错误在哪里?我认为它在路由自动完成路径中,但我不确定。如果它是我如何解决它? 非常感谢你,伙计们Drupal 8自定义自动完成错误500

我的表单自动完成表单元素:

$form['field_father'] = array(
     '#title' => t('Father'), 
     '#type' => 'textfield', 
     '#autocomplete_route_name' => 'cows.autocomplete', 
     '#autocomplete_route_parameters' => array(), 
    ); 

模块路由文件:

​​

控制器代码:

namespace Drupal\cows\Controller; 

use Drupal\Core\Controller\ControllerBase; 
use Symfony\Component\HttpFoundation\JsonResponse; 


class CowsController extends ControllerBase 
{ 
    public function autocomplete(Request $request) 
    { 
     $matches = []; 
     $string = $request->query->get('q'); 

     $query = \Drupal::database()->select('node__field_name', 'fn'); 
     $query->fields('fn', ['field_name_value', 'entity_id']); 
     $query->addField('fg', 'field_gender_value'); 
     $query->join('node__field_gender', 'fg', 'fg.entity_id = fn.entity_id '); 
     $query->condition('fn.field_name_value', '%' . $string . '%', 'LIKE'); 
     $query->condition('fg.field_gender_value', array('bull','ox'), 'IN'); 
     $result = $query->execute(); 

     foreach ($result as $row) { 
     $matches[] = ['value' => $row->entity_id, 'label' => $row->field_name_value]; 
     } 

     return new JsonResponse($matches); 
    } 
} 

非常感谢你太多

+0

添加命名空间使用Symfony \ Component \ HttpFoundation \ Request;在你的Controller文件中。 – vishwa

使用名称空间来支持Request $请求。

namespace Drupal\cows\Controller; 

use Drupal\Core\Controller\ControllerBase; 
use Symfony\Component\HttpFoundation\JsonResponse; 
/****this is newly added****/ 
use Symfony\Component\HttpFoundation\Request; 

class CowsController extends ControllerBase 
{ 
    public function autocomplete(Request $request) 
    { 
     $matches = []; 
     $string = $request->query->get('q'); 

     $query = \Drupal::database()->select('node__field_name', 'fn'); 
     $query->fields('fn', ['field_name_value', 'entity_id']); 
     $query->addField('fg', 'field_gender_value'); 
     $query->join('node__field_gender', 'fg', 'fg.entity_id = fn.entity_id '); 
     $query->condition('fn.field_name_value', '%' . $string . '%', 'LIKE'); 
     $query->condition('fg.field_gender_value', array('bull','ox'), 'IN'); 
     $result = $query->execute(); 

     foreach ($result as $row) { 
     $matches[] = ['value' => $row->entity_id, 'label' => $row->field_name_value]; 
     } 

     return new JsonResponse($matches); 
    } 
} 

真的有效。所以问题解决了。 只是我想重复一遍 - 我错过了添加请求命名空间:

使用Symfony \ Component \ HttpFoundation \ Request;

谢谢,@vishwa!