2012-10-10 18 views
19

मेरे पास इकाई Page कॉलम type=integer के साथ इकाई वर्ग है। जब मैं करता हूं:सोनाटाडमिनबंडल: एक ही इकाई के लिए एकाधिक व्यवस्थापक अनुभाग

<service id="sonata.admin.pages" class="Main\ProgramBundle\Admin\PageAdmin"> 
     <tag name="sonata.admin" manager_type="orm" group="dashboard" label="Pages"/> 
     <argument /> 
     <argument>Main\ProgramBundle\Entity\Page</argument> 
     <argument>SonataAdminBundle:CRUD</argument> 
    </service> 


    <service id="sonata.admin.groups" class="Main\ProgramBundle\Admin\GroupAdmin"> 
     <tag name="sonata.admin" manager_type="orm" group="stories" label="Groups"/> 
     <argument /> 
     <argument>Main\ProgramBundle\Entity\Page</argument> 
     <argument>SonataAdminBundle:CRUD</argument> 
    </service> 

संक्षेप में, दोनों अनुभाग एक ही इकाई पर काम करते हैं, सिवाय इसके कि प्रत्येक के पास अलग-अलग प्रश्न और रूप हैं।

लेकिन क्या होता है कि सोनाटा हमेशा एडमिन/ग्रुपएडमिन निष्पादित करता है, भले ही मैं पेजएडमिन का चयन करता हूं। यह कैसे करना है?

उत्तर

31

मैं पिछले जवाब देने के लिए एक टिप्पणी जोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन यह निम्न जानकारी याद आ रही है:

आप भी अपने व्यवस्थापक कक्षाओं में $ baseRoutePattern के अलावा एक अद्वितीय $ baseRouteName मूल्य निर्धारित करने होंगे:

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname'; 

protected $baseRoutePattern = 'unique-route-pattern'; 

आप केवल एक वर्ग को यह सब करने की ज़रूरत, ख यह सुनिश्चित करने के लिए कि क्या हो रहा है, दोनों में यह करने पर विचार करें।

+3

जब भी आप इस इकाई को किसी अन्य व्यवस्थापक में जोड़ते हैं तो भी आप समस्याएं चलाएंगे। सोनाटा एक त्रुटि बताएगी कि पंजीकृत कई व्यवस्थापक हैं .. यह तय है ऐड फ़ंक्शन में 'admin_code' => 'sonata.product.admin.product' जोड़कर। यह सोनाटा को बताएगा कि कौन सा व्यवस्थापक विशेष रूप से उपयोग करेगा। – 11mb

+0

धन्यवाद! @ 11 एमबी मुझे एक शो में समस्या थी, बस '' '-> जोड़ें ('कुछ प्रॉपर्टी', शून्य, सरणी ('admin_code' => 'some.service.admin, id'))' ' – Cassiano

4

सोनाटा स्वचालित रूप से आपके इकाई नामों के आधार पर मार्ग बनाता है। तो यदि आपके पास 2 व्यवस्थापक वर्ग हैं, तो एक संघर्ष है। आपको विभिन्न मार्ग पैटर्न को कॉन्फ़िगर करना होगा।

मुख्य \ ProgramBundle \ व्यवस्थापक \ GroupAdmin.php को यह संपत्ति जोड़ें:

protected $baseRoutePattern = 'page-group'; 
+0

मैंने किया, अब दोनों यूआरएल 'व्यवस्थापक/पृष्ठ-समूह/सूची' हैं, भले ही मैं पेज एडमिन और ग्रुपएडमिन दोनों में इन गुणों (अलग, संभोग) को रखूं ,( – Zeljko

+0

इस संपत्ति को दोनों कक्षाओं में न रखें। आपको यह संपत्ति केवल अपने एडमिन क्लास में से एक में डालनी चाहिए। अगर आप इसे दोनों में डाल देते हैं, तो आप पहले की तरह एक ही संघर्ष की स्थिति में जाएंगे। – pulzarraider

+2

पहली चीज मैंने कोशिश की है जैसा आपने बताया था; संपत्ति को केवल एक व्यवस्थापक वर्ग में रखें यह काम नहीं करता और उसके बाद, मैंने दोनों मामलों की कोशिश की। – Zeljko

-1

आपको निश्चित रूप से आपका समाधान मिला, लेकिन ऐसा करने का एक और तरीका माता-पिता वर्ग बनाना और inheritance mapping का उपयोग करना होगा। फिर आप अलग-अलग भंडार प्राप्त कर सकते हैं और सोनाटा व्यवस्थापक अलग-अलग काम नहीं करेगा।

+1

यह होगा कोड कोड स्निपेट के साथ बेहतर :) – ForceMagic

+0

मैंने इसे अपने मूल को विस्तारित करने वाली इकाई के साथ पहली बार कोशिश की - लेकिन 'कंसोल सिद्धांत: स्कीमा: अपडेट' विफल रहता है क्योंकि आप एक ही टेबल को दो बार बनाने की कोशिश कर रहे हैं - या इससे भी बदतर, आप समाप्त होते हैं डीबी में दो टेबल। –

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