J'utilise PartKeepr 1.3.0
J'ai un problème avec la numérisation des codes-barres pour ouvrir la boîte de dialogue de modification de la pièce.
J'ai créé des codes à barres avec le préfixe "PID-" + l'identifiant unique de la pièce
J'ai configuré le code "PID-" dans PartKeepr avec "Rechercher une pièce" comme action, puis j'ai sélectionné PartKeepr.PartBundle.Entity.Part. @id comme champ de recherche.
Je suis capable de scanner d'autres codes-barres pour les emplacements de stockage et ceux-ci ouvrent la requête pour les pièces dans l'emplacement comme prévu. Cela semble être spécifique à la recherche de pièce.
Lorsque je scanne un code-barres par exemple "PID-12", PartKeepr répond au scan mais affiche l'erreur suivante :
[Erreur de syntaxe] ligne 0, col 83 : Erreur : Attendu =, <, <=, <>, >, >=, !=, obtenu 'id'
OBTENIR http://192.168.0.196/parts/web/api/parts?_dc=1510689688405
500
{"@context":"\/parts\/web\/api\/contexts\/Error","@type":"Error"," hydra:title ":"Une erreur s'est produite"," hydra:description " :"[Erreur de syntaxe] ligne 0, col 83 : Erreur : Attendu =, \u003C, \u003C=, \u003C\u003E, \u003E, \u003E=, !=, obtenu \u0027id\u0027"}
doctrine_orm_version: 2.5.4
doctrine_dbal_version : 2.5.2
doctrine_common_version: 2.6.0-DEV
php_version : 7.0.22-0ubuntu0.16.04.1
auto_start_session : vrai
maxUploadSize : 2097152
isOctoPartAvailable : faux
Formats d'image disponibles : JPG, GIF, PNG
max_users : illimité
authentication_provider : PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri : https://partkeepr.org/tips/%s
password_change : vrai
patreonStatus : [objet Objet]
Je pense que je sais ce qui se passe ici, mais aucune idée de comment résoudre. Il semble qu'un @ soit ajouté au début de la variable id dans la requête GET.
Lorsque cela se produit, l'erreur se produit, si je modifie la demande d'obtention et supprime ce symbole @, j'obtiens une réponse qui ressemble à ceci :
{"@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":[]}}
On dirait qu'il renvoie la bonne réponse indiquant à l'interface utilisateur d'invoquer une requête de recherche... ?
Donc, je suppose que la question est de savoir comment pouvons-nous empêcher ce @ d'être inclus dans la requête GET sur le scan du code-barres ?
Ok, même si ce n'est pas une solution, j'ai trouvé une solution de contournement.
J'ai dû modifier le fichier suivant et tout fonctionne maintenant, je peux analyser l'identifiant de l'article et la recherche fonctionne comme prévu :
/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php
Modifier la ligne 353 De :
$filter->setProperty($data->property);
À:
$filter->setProperty(str_replace("@","",$data->property));
Fondamentalement, c'est le symbole @ qui cause le problème et il doit être supprimé de la requête GET Ajax. Je ne sais pas exactement où apporter ce changement, mais cela a fonctionné pour moi comme une solution temporaire jusqu'à ce que quelqu'un puisse dire comment y parvenir correctement ...
Vous avez le même problème, semble être le même que https://github.com/partkeepr/PartKeepr/issues/894
Une meilleure solution de contournement consiste à remplacer le nom de la propriété directement dans src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php
public function setProperty($property)
{
$this->property = str_replace("@", "", $property);
}
Commentaire le plus utile
Une meilleure solution de contournement consiste à remplacer le nom de la propriété directement dans
src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php