أنا أستخدم PartKeepr 1.3.0
لدي مشكلة في مسح الرموز الشريطية لفتح مربع حوار تعديل الجزء.
لقد قمت بإنشاء رموز شريطية ببادئة "PID -" + معرف الجزء الفريد
قمت بإعداد كود "PID-" في PartKeepr مع "جزء البحث" باعتباره الإجراء ، ثم حددت PartKeepr.PartBundle.Entity.Part. id كحقل البحث.
أنا قادر على مسح الرموز الشريطية الأخرى لمواقع التخزين وتلك التي تفتح الاستعلام عن أجزاء في الموقع كما هو متوقع. يبدو أن هذا خاص ببحث الجزء.
عندما أقوم بمسح رمز شريطي على سبيل المثال "PID-12" يستجيب PartKeepr للمسح ولكنه يعرض الخطأ التالي:
[خطأ في بناء الجملة] السطر 0 ، العمود 83: الخطأ: المتوقع = ، <، <= ، <> ،> ،> = ،! = ، حصلت على 'id'
احصل على http://192.168.0.196/parts/web/api/parts؟_dc=1510689688405
500
{"context": "\ / parts \ / web \ / api \ / Contexts \ / Error"، "@ type": "Error"، " hydra: title ": "حدث خطأ"، " hydra: description " : "[خطأ في بناء الجملة] السطر 0 ، العمود 83: الخطأ: المتوقع = ، \ u003C ، \ u003C = ، \ u003C \ u003E ، \ u003E ، \ u003E = ،! = ، حصلت \ u0027id \ u0027"}
Duration_orm_version: 2.5.4
DIPAL_DBAL_Version: 2.5.2
Duration_common_version: 2.6.0-DEV
php_version: 7.0.22-0ubuntu0.16.04.1
auto_start_session: صحيح
ماكس تحميل الحجم: 2097152
isOctoPartAvailable: خطأ
الصور المتاحة التنسيقات: JPG ، GIF ، PNG
max_users: غير محدود
Authentication_provider: PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri: https://partkeepr.org/tips/٪s
تغيير كلمة المرور: صحيح
patreonStatus: [كائن كائن]
أعتقد أنني أعرف ما يحدث هنا ولكن ليس لدي فكرة عن كيفية حلها. يبدو أنه يتم إضافة @ إلى متغير id في طلب GET.
عند حدوث ذلك ، يحدث الخطأ ، إذا قمت بتعديل طلب get وأزلت الرمز @ ، فسأحصل على استجابة تبدو كالتالي:
{"@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":[]}}
يبدو أن هذا يعرض الاستجابة الصحيحة التي تخبر واجهة المستخدم باستدعاء استعلام بحث ...؟
لذا أعتقد أن السؤال هو كيف يمكننا تقييد هذا @ من تضمينه في استعلام GET في مسح الرمز الشريطي؟
حسنًا ، بقدر ما هذا ليس حلاً ، فقد وجدت حلًا.
اضطررت إلى تعديل الملف التالي وعمل كل شيء الآن ، وأنا قادر على فحص معرف العنصر ويعمل البحث كما هو متوقع:
/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php
تعديل السطر 353 من:
$filter->setProperty($data->property);
ل:
$filter->setProperty(str_replace("@","",$data->property));
في الأساس هو رمز @ هو الذي يسبب المشكلة ويجب إزالته من طلب GET Ajax. لست متأكدًا تمامًا من مكان إجراء هذا التغيير ، لكن القيام بما ورد أعلاه كان مفيدًا بالنسبة لي كإصلاح مؤقت حتى يتمكن شخص ما من الاتصال بكيفية تحقيق ذلك بشكل صحيح ...
حصلت على نفس المشكلة ، ويبدو أنها نفسها من https://github.com/partkeepr/PartKeepr/issues/894
الحل الأفضل هو استبدال اسم الخاصية مباشرة بـ src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php
public function setProperty($property)
{
$this->property = str_replace("@", "", $property);
}
التعليق الأكثر فائدة
الحل الأفضل هو استبدال اسم الخاصية مباشرة بـ
src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php