簡體   English   中英

如何在奏鳴曲管理包中使用 CRUD 控制器創建自定義表單?

[英]How to create a custom form using CRUD controller in sonata admin bundle?

我是奏鳴曲管理的初學者,我需要知道如何使用路由和控制器以及 index.html.twig 創建自定義表單。

   app.admin.category:
        class: AppBundle\Admin\CategoryAdmin
        arguments: [~, AppBundle\Entity\Category, SonataAdminBundle:CRUD]
        tags:
            - { name: sonata.admin, manager_type: orm, group: adminn, label: Category }
        public: true

您需要創建 CRUD 控制器。 對於每個管理服務,您都有一個默認服務,您可以覆蓋它。 在您的情況下,服務是app.admin.category

如何創建 CRUD 控制器? 我會用最簡單的方式來解釋。

  1. 在您的AppBundle/Controller/Admin/文件夾中創建類並將其命名為 CategoryAdminController。 這是您班級的代碼:

     <?php namespace AppBundle\\Controller\\Admin; use Sonata\\AdminBundle\\Controller\\CRUDController; /** * Class CategoryAdminController * @package AppBundle\\Controller\\Admin\\ */ class CategoryAdminController extends CRUDController { }

    如您所見,此類擴展了默認的 SonataAdminCRUDController。

  2. 然后指向你的奏鳴曲服務,它必須使用這個類,因為它是 CRUDContoller。 在您的 service.yml 中更改標准 CRUD 控制器:

    app.admin.category: 類: AppBundle\\Admin\\CategoryAdmin 參數: [~, AppBundle\\Entity\\Category, AppBundle:Admin\\CategoryAdmin] 標簽: - { name: soata.admin, manager_type: orm, group: adminn, label:類別 } 公開:真實

  3. 現在您已准備好在新控制器中進行新操作。 我們稱之為changeAction。

     /** * @param int $id * * @return Response */ public function changeAction($id = null) { try { if ($id !== null) { $category = $this->admin->getObject($id); } } catch (NotFoundHttpException $e) { error_log($e->getMessage()); } // .. Here is a code of creating your custom form with variable $form return $this->render('@App/Admin/CRUD/index.html.twig', [ 'custom_form' => $form->createView(), ]); }
  4. 為您的新行動開辟路線! 在您的CategoryAdmin服務中覆蓋configureRoutes()方法

    /** * @param RouteCollection $collection */ protected function configureRoutes(RouteCollection $collection) { $collection->add('change', $this->getRouterIdParameter().'/change'); }
  5. 最后 - 我們可以將按鈕設置為我們的路線:

     /** * @param ListMapper $listMapper */ protected function configureListFields(ListMapper $listMapper) { $listMapper //.. Your fields... ->add('_action', 'actions', [ 'label' => ' ', 'actions' => [ //'show' => array(), // I removed show action button, but you can uncomment //'edit' => array(), // I removed edit action button, but you can uncomment //'delete' => array(), // I removed delete action button, but you can uncomment 'change' => [ 'template' => 'AppBundle::Admin\\CRUD\\Buttons\\change_category_button.html.twig', ] ] ]) ; }

當然不要忘記為你的新按鈕創建一個樹枝模板並將它放在正確的位置AppBundle/Resources/views/Admin/CRUD/Buttons/

//'AppBundle::Admin\CRUD\Buttons\change_category_button.html.twig':

{% if admin.isGranted('EDIT', object) and admin.hasRoute('change') %}
    <a href="{{ admin.generateObjectUrl('change', object) }}" class="btn btn-sm btn-primary edit_link" title="Your title here"  style="display: inline-block">
        <i class="fa fa-toggle-on"> </i>
        Change Button
    </a>
{% endif %}

對於最新的 symfony/sonata,staskrak 解決方案不再適用於我。 所以我采用了https://sonata-project.org/bundles/admin/3-x/doc/cookbook/recipe_custom_view.html 的解決方案

只需添加文件 admin/my_form.html.twig 就像

{# templates/admin/my_form.html.twig #}

{% extends '@SonataAdmin/standard_layout.html.twig' %}

{% block sonata_admin_content %}
    {{ form(form) }}
{% endblock %}

並在 SomeAdminController 中使用它

public function batchActionMyAction(ProxyQueryInterface $selectedModelQuery, Request $request = null)
{
    $this->admin->checkAccess('edit');
    $this->admin->checkAccess('delete');

    $form = $this->createFormBuilder([])
        ->add('smsText', TextType::class)
        ->add('save', SubmitType::class, ['label' => 'Create Task'])
        ->getForm();

    return $this->render('Admin/my_form.html.twig', [
        'form' => $form->createView(),
    ]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM