api 平台,无法使用 symfony 4 将自定义搜索过滤器添加到摘要 class
api platform, can't add a custom search filter to an abstract class using symfony 4
我正在尝试为摘要创建自定义搜索过滤器 class,我希望能够通过一个关键字进行搜索。
搜索过滤代码:
public function getDescription(string $resourceClass): array
{
$reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(new $resourceClass), SearchAnnotation::class);
$description['search'] = [
'property' => 'search',
'type' => 'string',
'required' => false,
'swagger' => ['description' => 'FullTextFilter on ' . implode(', ', $annotation->fields)],
];
return $description;
}
自定义搜索尝试获取资源的新实例 class 但在我的例子中它是一个抽象的 class 并且我得到了关于 :
的错误
无法实例化抽象 class。
在 filterProperty 函数中,我需要从注释中获取字段:
$reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(new $resourceClass), SearchAnnotation::class);
if (!$annotation) {
throw new \HttpInvalidParamException('No Search implemented.');
}
$parameterName = $queryNameGenerator->generateParameterName($property);
$search = [];
$mappedJoins = [];
foreach ($annotation->fields as $field)
{
$joins = explode(".", $field);
for ($lastAlias = 'o', $i = 0, $num = count($joins); $i < $num; $i++) {
$currentAlias = $joins[$i];
if ($i === $num - 1) {
$search[] = "{$lastAlias}.{$currentAlias} = :{$parameterName}";
} else {
$join = "{$lastAlias}.{$currentAlias}";
if (false === array_search($join, $mappedJoins)) {
$queryBuilder->leftJoin($join, $currentAlias);
$mappedJoins[] = $join;
}
}
$lastAlias = $currentAlias;
}
}
我需要在不实例化抽象的情况下获取字段 class。
我试图通过调用 :
来删除新资源 class
$reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(AbstractContact::class), SearchAnnotation::class);
我得到:正在尝试获取 属性 'fields' 的非对象
无需实例化 class,您可以访问 $this->properties
参考:https://api-platform.com/docs/core/filters/#creating-custom-filters
我正在尝试为摘要创建自定义搜索过滤器 class,我希望能够通过一个关键字进行搜索。
搜索过滤代码:
public function getDescription(string $resourceClass): array
{
$reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(new $resourceClass), SearchAnnotation::class);
$description['search'] = [
'property' => 'search',
'type' => 'string',
'required' => false,
'swagger' => ['description' => 'FullTextFilter on ' . implode(', ', $annotation->fields)],
];
return $description;
}
自定义搜索尝试获取资源的新实例 class 但在我的例子中它是一个抽象的 class 并且我得到了关于 :
的错误无法实例化抽象 class。
在 filterProperty 函数中,我需要从注释中获取字段:
$reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(new $resourceClass), SearchAnnotation::class);
if (!$annotation) {
throw new \HttpInvalidParamException('No Search implemented.');
}
$parameterName = $queryNameGenerator->generateParameterName($property);
$search = [];
$mappedJoins = [];
foreach ($annotation->fields as $field)
{
$joins = explode(".", $field);
for ($lastAlias = 'o', $i = 0, $num = count($joins); $i < $num; $i++) {
$currentAlias = $joins[$i];
if ($i === $num - 1) {
$search[] = "{$lastAlias}.{$currentAlias} = :{$parameterName}";
} else {
$join = "{$lastAlias}.{$currentAlias}";
if (false === array_search($join, $mappedJoins)) {
$queryBuilder->leftJoin($join, $currentAlias);
$mappedJoins[] = $join;
}
}
$lastAlias = $currentAlias;
}
}
我需要在不实例化抽象的情况下获取字段 class。
我试图通过调用 :
来删除新资源 class $reader = new AnnotationReader();
$annotation = $reader->getClassAnnotation(new \ReflectionClass(AbstractContact::class), SearchAnnotation::class);
我得到:正在尝试获取 属性 'fields' 的非对象
无需实例化 class,您可以访问 $this->properties
参考:https://api-platform.com/docs/core/filters/#creating-custom-filters