Partkeepr: ๋ถ€ํ’ˆ ID ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ๊ฒ€์ƒ‰

์— ๋งŒ๋“  2017๋…„ 11์›” 14์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: partkeepr/PartKeepr

๋‚˜๋Š” PartKeepr 1.3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

๋ถ€ํ’ˆ ์ˆ˜์ • ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์—ด๊ธฐ ์œ„ํ•ด ๋ฐ”์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ‘๋‘์‚ฌ "PID-"+๋ถ€ํ’ˆ ๊ณ ์œ  ID๊ฐ€ ์žˆ๋Š” ๋ฐ”์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

"Search Part"๋ฅผ Action์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ PartKeepr์— "PID-" ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ PartKeepr.PartBundle.Entity.Part๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. @id ๋ฅผ ๊ฒ€์ƒ‰ ํ•„๋“œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ ์œ„์น˜์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ฐ”์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ˆ์ƒ๋Œ€๋กœ ํ•ด๋‹น ์œ„์น˜์˜ ๋ถ€ํ’ˆ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ€ํ’ˆ ์กฐํšŒ์—๋งŒ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "PID-12"์™€ ๊ฐ™์€ ๋ฐ”์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๋ฉด PartKeepr์ด ์Šค์บ”์— ์‘๋‹ตํ•˜์ง€๋งŒ ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์„ธ๋ถ€

[๊ตฌ๋ฌธ ์˜ค๋ฅ˜] ํ–‰ 0, ์—ด 83: ์˜ค๋ฅ˜: ์˜ˆ์ƒ =, <, <=, <>, >, >=, !=, 'id'๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ

GET http://192.168.0.196/parts/web/api/parts?_dc=1510689688405

์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ

500

์‘๋‹ต

{"@context":"\/parts\/web\/api\/contexts\/Error","@type":"์˜ค๋ฅ˜"," hydra:title ":"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค"," hydra:description " :"[๊ตฌ๋ฌธ ์˜ค๋ฅ˜] ์ค„ 0, ์—ด 83: ์˜ค๋ฅ˜: ์˜ˆ์ƒ =, \u003C, \u003C=, \u003C\u003E, \u003E, \u003E=, !=, \u0027id\u0027์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค."}

์„œ๋ฒ„ ๊ตฌ์„ฑ

๊ต๋ฆฌ_orm_version: 2.5.4
๊ต๋ฆฌ_dbal_version: 2.5.2
๊ต๋ฆฌ_๊ณตํ†ต_๋ฒ„์ „: 2.6.0-DEV
PHP_๋ฒ„์ „: 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: [๊ฐ์ฒด ๊ฐœ์ฒด]

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋” ๋‚˜์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php ์—์„œ ์ง์ ‘ ์†์„ฑ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

public function setProperty($property)
{
    $this->property = str_replace("@", "", $property);
}

๋ชจ๋“  4 ๋Œ“๊ธ€

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. GET ์š”์ฒญ์˜ id ๋ณ€์ˆ˜ ์•ž์— @๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ 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":[]}}

์กฐํšŒ ์ฟผ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก UI์— ์•Œ๋ฆฌ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค...?

๋”ฐ๋ผ์„œ ์งˆ๋ฌธ์€ ์ด @๊ฐ€ ๋ฐ”์ฝ”๋“œ ์Šค์บ”์˜ GET ์ฟผ๋ฆฌ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ข‹์•„, ์ด๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹Œ ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๊ณ  ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ๋ชฉ ID๋ฅผ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๊ณ  ์กฐํšŒ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php

353ํ–‰ ์ˆ˜์ •:

$filter->setProperty($data->property);
NS:
$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);
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

baradhili picture baradhili  ยท  17์ฝ”๋ฉ˜ํŠธ

christianlupus picture christianlupus  ยท  55์ฝ”๋ฉ˜ํŠธ

FinalHopee picture FinalHopee  ยท  32์ฝ”๋ฉ˜ํŠธ

Drachenkaetzchen picture Drachenkaetzchen  ยท  11์ฝ”๋ฉ˜ํŠธ

mctomaszek picture mctomaszek  ยท  20์ฝ”๋ฉ˜ํŠธ