Estou usando o PartKeepr 1.3.0
Eu tenho um problema com a leitura de códigos de barras para abrir a caixa de diálogo de modificação de peça.
Criei códigos de barras com o prefixo "PID -" + ID exclusivo da peça
Eu configurei o código "PID-" no PartKeepr com "Search Part" como a Action e, em seguida, selecionei PartKeepr.PartBundle.Entity.Part. @id como o campo de pesquisa.
Consigo escanear outros códigos de barras para locais de armazenamento e eles abrem a consulta de peças no local conforme o esperado. Isso parece ser específico da Part Lookup.
Quando eu digitalizo um código de barras, por exemplo "PID-12", PartKeepr responde à digitalização, mas exibe o seguinte erro:
[Erro de sintaxe] linha 0, coluna 83: Erro: esperado =, <, <=, <>,>,> =,! =, Obteve 'id'
OBTER http://192.168.0.196/parts/web/api/parts?_dc=1510689688405
500
{"@context": "\ / parts \ / web \ / api \ / contexts \ / Error", "@ type": "Error", " hydra: title ": "Ocorreu um erro", " hydra: description " : "[Erro de sintaxe] linha 0, coluna 83: Erro: esperado =, \ u003C, \ u003C =, \ u003C \ u003E, \ u003E, \ u003E =,! =, Obtido \ u0027id \ u0027"}
doctrine_orm_version: 2.5.4
Doutrine_dbal_version: 2.5.2
Doutrine_common_version: 2.6.0-DEV
php_version: 7.0.22-0ubuntu0.16.04.1
auto_start_session: true
maxUploadSize: 2097152
isOctoPartAvailable: false
availableImageFormats: JPG, GIF, PNG
max_users: ilimitado
authentication_provider: PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri: https://partkeepr.org/tips/%s
password_change: true
patreonStatus: [objeto objeto]
Acho que sei o que está acontecendo aqui, mas não tenho ideia de como resolver. Parece que um @ está sendo anexado à variável id na solicitação GET.
Quando isso acontece, o erro ocorre, se eu modificar a solicitação get e remover o símbolo @, recebo uma resposta semelhante a esta:
{"@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":[]}}
Parece que ele retorna a resposta correta, informando a IU para invocar uma consulta de pesquisa ...?
Então, eu acho que a questão é como podemos limitar este @ de ser incluído na consulta GET na leitura de código de barras?
Ok, por mais que isso não seja uma solução, eu encontrei uma solução.
Tive que modificar o seguinte arquivo e tudo funciona agora, posso verificar a identificação do item e a pesquisa funciona conforme o esperado:
/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php
Modifique a linha 353 de:
$filter->setProperty($data->property);
Para:
$filter->setProperty(str_replace("@","",$data->property));
Basicamente, é o símbolo @ que está causando o problema e precisa ser removido da solicitação GET Ajax. Não tenho certeza de onde fazer essa alteração, mas fazer o acima funcionou para mim como uma correção temporária até que alguém pudesse intervir sobre como fazer isso corretamente ...
Tenho o mesmo problema, parece ser o mesmo que https://github.com/partkeepr/PartKeepr/issues/894
A melhor solução é substituir o nome da propriedade diretamente em src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php
public function setProperty($property)
{
$this->property = str_replace("@", "", $property);
}
Comentários muito úteis
A melhor solução é substituir o nome da propriedade diretamente em
src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php