का उपयोग करके संबंधित आइटम जोड़ना मेरे पास सोनाटा एडमिन है और दो मॉडल/एडमिन क्लास परिभाषित के साथ प्रोपेल का उपयोग कर चल रहा है; Portfolio
और Image
, जहां एक पोर्टफोलियो आइटम में कई छवियां हो सकती हैं।सोनाटा एडमिन और प्रोपेल
मेरे पास ImageAdmin
है जो पोर्टफोलियो आइटम से जुड़े चित्रों को अपलोड करने की अनुमति देता है।
PortfolioAdmin
में मैं मॉडल फ़ॉर्म मैपर प्रकार का उपयोग कर पोर्टफोलियो आइटम में मौजूदा छवियां जोड़ सकता हूं।
क्या कोई पोर्टफोलियो आइटम जोड़ने/संपादित करते समय छवियों को जोड़ने/हटाने की क्षमता जोड़ने का कोई तरीका है, बल्कि केवल मौजूदा आइटम चुनें, या संबंधित आइटम जोड़ने/निकालने का एक तरीका केवल छवि ऑब्जेक्ट को हटाएं इस समय मेरे लिए मामला है।
मुझे पता है कि मेरे पास पोर्टफोलियो कक्षा के लिए कस्टम एडमिन कंट्रोलर लिखने का विकल्प है, लेकिन क्या इस व्यवहार को प्राप्त करने का एक पूर्व-निर्मित तरीका है?
संदर्भ के लिए, मैंने जो कुछ किया है उसके कुछ कोड अंश;
Schema.xml
<database name="default" namespace="MyBundle\Model" defaultIdMethod="native">
<table name="portfolio">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="title" type="varchar" primaryString="1" size="100" />
<column name="description" type="LONGVARCHAR" />
<behavior name="sluggable" />
<behavior name="timestampable" />
<behavior name="archivable" />
</table>
<table name="image">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="portfolio_id" type="integer" required="true" />
<column name="title" type="varchar" primaryString="1" size="100" />
<column name="path" type="varchar" size="255" />
<column name="description" type="LONGVARCHAR" />
<foreign-key foreignTable="portfolio">
<reference local="portfolio_id" foreign="id"/>
</foreign-key>
<behavior name="sluggable" />
<behavior name="timestampable" />
<behavior name="archivable" />
</table>
</database>
PortfolioAdmin.php
class PortfolioAdmin extends Admin
{
protected $baseRouteName = 'portfolio';
protected $baseRoutePattern = 'portfolio';
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title', 'text', array('label' => 'Title'))
->add('Images', 'model', array(
'class' => 'MyBundle\Model\Image',
'multiple' => true,
'expanded' => true,
), array())
->add('description', 'text', array('label' => 'Description'))
;
}
}
ImageAdmin.php
class ImageAdmin extends Admin
{
protected $baseRouteName = 'image';
protected $baseRoutePattern = 'image';
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title', 'text', array('label' => 'Title'))
->add('portfolio', 'sonata_type_model', array('label' => 'Job'))
->add('description', 'text', array('label' => 'Description'))
->add('file', 'file', array('required' => false))
;
}
}
admin.yml
services:
sonata.admin.portfolio:
class: MyBundle\Admin\PortfolioAdmin
tags:
- { name: sonata.admin, manager_type: propel, group: "Content", label: "Portfolio" }
arguments:
- ~
- MyBundle\Model\Portfolio
- ~
calls:
- [ setTranslationDomain, [MyBundle]]
sonata.admin.image:
class: MyBundle\Admin\ImageAdmin
tags:
- { name: sonata.admin, manager_type: propel, group: "Images", label: "Portfolio Image" }
arguments:
- ~
- MyBundle\Model\Image
- ~
calls:
- [ setTranslationDomain, [MyBundle]]