26

私はバックエンドを生成するためにソナタ管理バンドルを使用しています。バックエンドを使用して統計を表示したいと思っているので、とても満足しています。

バンドルのビュー、「standard_layout.html.twig」を微調整することでそれができると思います。

問題は、例が見つからないこと、またはそれについて話している人さえ見つからないことです。あまりにも単純すぎるから、人々はそれについて話しているのではありませんか? あなたはそれをやりましたか ?

私は本当に単一のバックエンドを持ちたいので、教えてください!

ありがとうございます

4

5 に答える 5

20

パルザレイダーがこれを行う方法の 1 つを説明したので、もう 1 つの方法を説明します。

ブロック バンドルの方法により、非常に強力な方法でダッシュボードをカスタマイズできます。ブロックバンドルのドキュメントを同時にフォローできます

1. Copndz\MyBundle\Block\Service に StatisticsBlockService.php を作成します。

保存されたデータを使用して数学を実行して統計を表示したい: 私はする必要があります

  • EntityManager をインポートする
  • 属性 $em をサービスに追加します
  • 親コンストラクターを呼び出し、引数に渡された EntityManager で $em を設定するコンストラクター __construct を追加します

namespace Copndz\MyBundle\Block\Service;
use Symfony\Component\HttpFoundation\Response;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Validator\ErrorElement;
use Sonata\BlockBundle\Model\BlockInterface;
use Sonata\BlockBundle\Block\BaseBlockService;
use Doctrine\ORM\EntityManager;

class StatisticsBlockService extends BaseBlockService
{
    private $em;
    
    /**
     * {@inheritdoc}
     */
    public function execute(BlockInterface $block, Response $response = null)
    {
        $settings = array_merge($this->getDefaultSettings(), $block->getSettings());
        
        $myentityrepository = $this->em->getRepository('CopndzMyBundle:MyEntity');
        $myentity = $myentityrepository->find('5');
        
        return $this->renderResponse('CopndzMyBundle:Block:block_statistics.html.twig', array(
            'block'     => $block,
            'settings'  => $settings,
            'myentity' => $myentity,   
        ), $response);
    }

    /**
     * {@inheritdoc}
     */
    public function validateBlock(ErrorElement $errorElement, BlockInterface $block)
    {
        // TODO: Implement validateBlock() method.
    }

    /**
     * {@inheritdoc}
     */
    public function buildEditForm(FormMapper $formMapper, BlockInterface $block)
    {
        $formMapper->add('settings', 'sonata_type_immutable_array', array(
            'keys' => array(
                array('content', 'textarea', array()),
            )
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'Text (core)';
    }

    /**
     * {@inheritdoc}
     */
    public function getDefaultSettings()
    {
        return array(
            'content' => 'Insert your custom content here',
        );
    }
    
    public function __construct($name, $templating, EntityManager $entityManager)
    {
            parent::__construct($name, $templating);
            $this->em = $entityManager;
    }
}

2. MyBundle\Ressources\config\services.yml でサービスを作成します

 sonata.block.service.statistics:
      class: Copndz\MyBundle\Block\Service\StatisticsBlockService
      tags:
        - { name: sonata.block }
      arguments:
        - "sonata.block.service.statistics"
        - @templating
        - @doctrine.orm.entity_manager

3. このサービスを config.yml の sonata_block に追加します

sonata_block:
    default_contexts: [cms]
    blocks:
        sonata.admin.block.admin_list:
            contexts:   [admin]

        sonata.block.service.text:
        sonata.block.service.rss:
        sonata.block.service.statistics:

4. Copndz\MyBundle\Ressources\views\Block にテンプレート block_statistics.html.twig を作成します。

{% extends sonata_block.templates.block_base %}

{% block block %}
    {{ myentity.name }}
{% endblock %}

5. 最後に、config.yml の管理バンドル構成でサービスを呼び出します。

sonata_admin:
    dashboard:
        blocks:
            # display a dashboard block
            - { position: left, type: sonata.admin.block.admin_list }
            - { position: right, type: sonata.block.service.statistics }
于 2013-04-15T10:22:57.723 に答える
15

実際にブロックを使用することと、別のページを作成することは少し異なります。OPはsonata admin内に別のページを作成しようとしていると思います。

  1. コントローラーを作成し、そのルートをrouting.ymlファイルで構成し、URL を sonata admin のように表示する場合は、sonata admin のプレフィックスと同じプレフィックスを設定します。

  2. テンプレートをレンダリングします。ここには2つのトリックがあります。

    まず、sonata admin の「レイアウト」テンプレートから拡張する必要があります。で変更した場合は、それにconfig.yml応じてコードを更新してください。参照

    {% extends "SonataAdminBundle::standard_layout.html.twig" %}
    

    これで、sonata admin のメニュー バーとフッターがこの新しいページに移動したことがわかります。しかし、メニューは空です。admin_poolメニューを表示するには、コントローラーからテンプレートに渡す必要があります。

    $admin_pool = $this->get('sonata.admin.pool');
    
    return array(
        'admin_pool' => $admin_pool,
        // Other variables to pass to template
    );
    
于 2014-05-12T17:03:59.560 に答える
0

あなたが達成しようとしていることは、Sonata Admin Bundle の Sonata Block Bundle 部分を使用して実行できると思います。

Sonata 管理ダッシュボードのドキュメントhttp://sonata-project.org/bundles/admin/2-1/doc/reference/dashboard.html

私はそれを自分でやったことはありません。

于 2013-04-12T11:41:02.100 に答える