2013-02-04 13 views
5

मैंने एक ऐसी इकाई बनाई है जिसमें Sortable व्यवहार है और इसका उपयोग करने के बारे में एक प्रश्न है।
स्थापित करने और पदों प्राप्त करने के लिए तरीकों मेरे लिए काफी नहीं हैं, इसलिए मैं सरल moveUp और निम्न कोड के साथ moveDown तरीकों क्या करना चाहते हैं:सिद्धांत 2 में क्रमबद्ध व्यवहार के साथ ऑर्डर करने वाली इकाइयां (सिम्फनी 2)

public function moveUp() { 
    ++$this->position; 
} 

public function moveDown() { 
    if($this->position != 0) 
     --$this->position; 
} 

इस कार्यान्वयन moveUp विधि है साथ पहले से अधिकतम स्थिति के साथ आइटम को बढ़ाने के लिए कोई सीमा नहीं है। ऐसी वस्तुओं को बढ़ाने में मना करने का सबसे अच्छा तरीका क्या है? मैंने सुना है कि सीधे संस्थाओं में कस्टम प्रश्न करना एक अच्छा अभ्यास नहीं है, तो मैं कैसे जांच सकता हूं कि आइटम में पहले से ही अधिकतम मूल्य है या नहीं?

उत्तर

0

अच्छी तरह से आप एक ईवेंट श्रोता हुक हो सकते हैं जो डेटाबेस से प्राप्त अधिकतम मूल्य के साथ SortableMaxAware इंटरफ़ेस डी इकाइयों को पॉप्युलेट करेगा। यह निश्चित रूप से बोझिल है, लेकिन हे आप ओआरएम का उपयोग कर रहे हैं :) मजा करो।

2

एक ही समस्या यहाँ, कोड को पढ़ने के द्वारा मैंने देखा है कि:

// Compute position if it is negative 
if ($newPosition < 0) { 
    $newPosition += $this->maxPositions[$hash] + 2; // position == -1 => append at end of list 
    if ($newPosition < 0) $newPosition = 0; 
} 

(SortableListener:141 में)

मुझे लगता है कि -1 स्थिति के रूप में सेट करके, यह सूची के अंत में ले जाया जाएगा । और -2 इसे दूसरे से आखिरी बार रखेगा।


संपादित: माफ करना, मैं बहुत तेजी से उत्तर दिया, मैं भी जोड़ना चाहते थे:

मुझे नहीं लगता कि आप स्थिति अपने आप को सीमित करने के लिए की आवश्यकता है, SortableListener करेंगे:

// Set position to max position if it is too big 
$newPosition = min(array($this->maxPositions[$hash] + 1, $newPosition)); 

तो आपका moveUp() फ़ंक्शन हो सकता है (बीटीडब्ल्यू आपने moveUp और moveDown रिवर्स किया था?):

public function moveUp() 
{ 
    if ($this->position != 0) { 
     $this->position--; 
    } 
} 
public function moveDown() 
{ 
    $this->position++; 
} 

अद्यतन: ठीक है कुछ परीक्षण के बाद, यह पता चला है कि सुविधा में एक बग है।

setPosition(-1) ऑब्जेक्ट को सूची के अंत में रखेगा, लेकिन यह स्थिति में एक अंतर बनाता है।

मैं इसे यहाँ reproduced किया है: https://github.com/l3pp4rd/DoctrineExtensions/pull/908

मुझे आशा है कि यह तय किया जाएगा।

संबंधित मुद्दे