Ich verwende PartKeepr 1.3.0
Ich habe ein Problem mit dem Scannen von Barcodes, um das Dialogfeld "Teile ändern" zu öffnen.
Ich habe Barcodes mit dem Präfix "PID-" + der eindeutigen ID des Teils erstellt
Ich habe den Code "PID-" in PartKeepr mit "Search Part" als Aktion eingerichtet und dann PartKeepr.PartBundle.Entity.Part ausgewählt. @id als
Ich kann andere Barcodes für Lagerorte scannen und diese öffnen wie erwartet die Abfrage nach Teilen am Lagerplatz. Dies scheint spezifisch für die Teilesuche zu sein.
Wenn ich einen Barcode zum Beispiel "PID-12" scanne, reagiert PartKeepr auf den Scan, zeigt aber den folgenden Fehler an:
[Syntaxfehler] Zeile 0, Spalte 83: Fehler: Erwartet =, <, <=, <>, >, >=, !=, got 'id'
Holen Sie sich http://192.168.0.196/parts/web/api/parts?_dc=1510689688405
500
{"@context":"\/parts\/web\/api\/contexts\/Error","@type":"Fehler"," hydra:title ":"Ein Fehler ist aufgetreten"," hydra:description " :"[Syntaxfehler] Zeile 0, Spalte 83: Fehler: Erwartet =, \u003C, \u003C=, \u003C\u003E, \u003E, \u003E=, !=, got \u0027id\u0027"}
Doktrin_orm_Version: 2.5.4
Doktrin_dbal_Version: 2.5.2
Doktrin_common_Version: 2.6.0-DEV
php_version: 7.0.22-0ubuntu0.16.04.1
auto_start_session: wahr
maxUploadGröße: 2097152
isOctoPartAvailable: false
verfügbareBildformate: JPG,GIF,PNG
max_users: unbegrenzt
Authentication_Provider: PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri: https://partkeepr.org/tips/%s
password_change: wahr
patreonStatus: [Objekt Objekt]
Ich glaube, ich weiß, was hier passiert, aber ich habe keine Ahnung, wie ich das lösen soll. Es scheint, dass der ID-Variablen in der GET-Anforderung ein @ vorangestellt wird.
Wenn das passiert, tritt der Fehler auf, wenn ich die Get-Anfrage ändere und das @-Symbol entferne, erhalte ich eine Antwort, die wie folgt aussieht:
{"@context":"\/parts\/web\/api\/contexts\/Part","@id":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026page=1\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","@type":"hydra:PagedCollection","hydra:totalItems":0,"hydra:itemsPerPage":50,"hydra:firstPage":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","hydra:lastPage":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","hydra:member":[],"hydra:search":{"@type":"hydra:IriTemplate","hydra:template":"\/parts\/web\/api\/parts{?}","hydra:variableRepresentation":"BasicRepresentation","hydra:mapping":[]}}
Dies sieht so aus, als ob es die richtige Antwort zurückgibt, die die Benutzeroberfläche anweist, eine Lookup-Abfrage aufzurufen...?
Ich denke also, die Frage ist, wie wir verhindern können, dass dieses @ in die GET-Abfrage des Barcode-Scans aufgenommen wird?
Ok, auch wenn dies keine Lösung ist, habe ich einen Workaround gefunden.
Ich musste die folgende Datei ändern und alles funktioniert jetzt, ich kann die Artikel-ID scannen und die Suche funktioniert wie erwartet:
/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php
Zeile 353 ändern von:
$filter->setProperty($data->property);
Zu:
$filter->setProperty(str_replace("@","",$data->property));
Im Grunde ist es das @-Symbol, das das Problem verursacht und es muss aus der GET Ajax-Anfrage entfernt werden. Ich bin mir nicht ganz sicher, wo ich diese Änderung vornehmen soll, aber dies hat für mich als vorübergehende Lösung funktioniert, bis sich jemand einmischen kann, wie man dies richtig erreicht ...
Habe das gleiche Problem, scheint das gleiche zu sein wie https://github.com/partkeepr/PartKeepr/issues/894
Eine bessere Problemumgehung besteht darin, den Eigenschaftsnamen direkt in src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php
zu ersetzen
public function setProperty($property)
{
$this->property = str_replace("@", "", $property);
}
Hilfreichster Kommentar
Eine bessere Problemumgehung besteht darin, den Eigenschaftsnamen direkt in
src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php
zu ersetzen