yform
yform copied to clipboard
yform 4.0.2 rest api: filterung funktioniert nicht
nach dem update von yforn 3.4.2 auf 4.0.2 funktioniert die filterung über filter[feldname]=suchwert parameter nicht mehr.
es gibt folgende fehlermeldung:
message: field-class-not-found
status: 400
folgendes beispiel funktioniert unter 3.4.2 und wirft unter 4.0.2 den fehler:
/rest/v2/npe_countries?token=ae0fef3f64f08d26862aa9ab2ad972f8&filter[status]=1
$route = new \rex_yform_rest_route(
[
'path' => '/v2/npe_countries/',
'auth' => '\rex_yform_rest_auth_token::checkToken',
'type' => \NPE15_countries_v2::class,
'query' => \NPE15_countries_v2::query(),
'get' => [
'fields' => [
'NPE15_countries_v2' => [
'country__name',
'country__code',
'status'
]
],
'filter' => [
'country__code',
'status'
]
]
]
);
\rex_yform_rest::addRoute($route);
anscheinend hat sich die funktion, die hier aufgerufen wird geändert https://github.com/yakamara/redaxo_yform/blob/b51a3593310b7a3951fb4e578ac3b82292d0dd9f/plugins/rest/lib/rest/route.php#L473
H A C K :
wenn ich die zeilen
$rawQuery = $field->getObject()->getSearchFilter([ 'value' => $filterValue, 'field' => $field, ]);
durch die (etwas angepassten) zeilen aus der alten funktion ersetze funktioniert es erstmal wieder:
/*
$rawQuery = $field->getObject()->getSearchFilter([
'value' => $filterValue,
'field' => $field,
]);
*/
$sql = rex_sql::factory();
$value = $filterValue;
$field = $field;
if ($value == '(empty)') {
$rawQuery = ' (' . $sql->escapeIdentifier($field) . ' = "" or ' . $sql->escapeIdentifier($field) . ' IS NULL) ';
} elseif ($value == '!(empty)') {
$rawQuery = ' (' . $sql->escapeIdentifier($field) . ' <> "" and ' . $sql->escapeIdentifier($field) . ' IS NOT NULL) ';
} else {
$pos = strpos($value, '*');
if ($pos !== false) {
$value = str_replace('%', '\%', $value);
$value = str_replace('*', '%', $value);
$rawQuery = $sql->escapeIdentifier($field) . ' LIKE ' . $sql->escape($value);
}else{
$rawQuery = $sql->escapeIdentifier($field) . ' = ' . $sql->escape($value);
}
}
sollte nun passen. Gerne testen