2017-11-21 18 views
0

두 엔터티 CrawlerCustomer이 있습니다. Crawler은 원격 URL에서 파싱 된 항목을 포함하고 CustomerCrawler 데이터의 수동으로 생성 된 항목을 포함합니다.관리자 클래스의 사전 작성 양식

나는 각각 CrawlerAdminCustomerAdmin을 만들었습니다. 이제 새로운 Customer 항목을 만들려면 "고객 만들기"와 같은 CrawlerAdmin 목록보기에서 사용자 지정 작업을 원합니다. 버튼을 클릭하면 CustomerAdmin 작성보기가 선택된 Crawler 항목의 값이 미리 채워진 필드와 함께 표시되어야합니다.

어떻게 이런 종류의 결과를 낼 수 있습니까?

편집 : 가능한 대안으로, 사용자 지정 CRUDController에서 "복제본"기능을 만들었습니다. Crawler 항목을 가져 와서 새로운 Customer 항목을 자동으로 만듭니다. 그런 다음 새로 생성 된 Customer 항목의 편집보기로 리디렉션해야합니다.

사용자 지정 Contoller에서 새로 만든 항목의 ID로 CustomerAdmin 수정보기로 리디렉션하는 방법은 무엇입니까?

<?php 
// src/CrawlerBundle/Controller/CRUDController.php 

namespace CrawlerBundle\Controller; 

use FrontendBundle\Entity\Customer; 
use Sonata\AdminBundle\Controller\CRUDController as Controller; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

class CRUDController extends Controller 
{ 
    /** 
    * @param $id 
    * @return RedirectResponse 
    */ 
    public function cloneAction($id) 
    { 
     $object = $this->admin->getSubject(); 

     if (!$object) { 
      throw new NotFoundHttpException'unable to find object'); 
     } 

     $newObject = new Customer(); 
     $newObject->setCompanyName($object->getCompanyName().' (Clone)'); 
     $newObject->setRegisterNumber($object->getRegisterNumber().' (Clone)'); 
     $newObject->setFields(array()); // ignore this 

     $this->admin->create($newObject); 

     $this->addFlash('sonata_flash_success', 'Cloned successfully'); 

     // return new RedirectResponse($this->admin->generateUrl('list')); 

     // if you have a filtered list and want to keep your filters after the redirect 
     return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters()))); 
     // just redirects to the class list view 
    } 
} 

내 서비스 정의 : 당신이 더 많은 정보가 필요하면

crawler.admin.crawler: 
    class: CrawlerBundle\Admin\CrawlerAdmin 
    arguments: [~, CrawlerBundle\Entity\Crawler, CrawlerBundle:CRUD] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: admin, label: Crawler, pager_type: "simple" } 

는 의견을주십시오

는 컨트롤러입니다.

미리 감사드립니다.

+0

당신은 당신의 생성 링크에 URL 매개 변수를 설정하고 그것으로()에의 getSubject을 설정하기 위해 사용자의 관리자의 configureFormFields 기능에 그것을 얻을 수 있습니다. – pbenard

+0

예, 현재 Admin에 링크되어 있습니다. ( – Kapparina

답변

0

자식 링크를 만들려면 부모 매개 변수와 함께 url 매개 변수를 전달하십시오. 하위 관리자에서이 매개 변수를 가져 와서 새 객체를 설정하면됩니다. Exemple 다음 configureFormFields 기능 :

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $object = $formMapper->getFormBuilder()->getData(); 
    $parentId = $this->getRequest()->get('objectId'); 

    if (null === $object || null === $object->getParentDocument()) { 
     $object = new ChildEntity(); 
     $parentDoc = $this->getParentAdmin()->getObject($parentId); 
     if (null !== $parentDoc) { 
      $object->setParentDocument($parentDoc); 
     } 
     $formMapper->getFormBuilder()->setData($object); 
    } 

    .... 
} 
+0

symfony 3에 대한 것입니까? – Kapparina

+0

이 기능은 Admin Class에 있습니다 .... – pbenard

+0

답변을 주셔서 감사합니다. – Kapparina