ソナタ管理バンドルを使用してバックエンドを生成しています。これに満足しているので、バックエンドを使用して統計も表示したいと思います。
バンドルのビュー「standard_layout.html.twig」を微調整することでそれができると思います。
問題は、例やそれについて話している人さえも見つからないので、それは可能でしょうか?単純すぎるので、人々はそれについて話していませんか?あなたはそれをしましたか ?
私は本当に単一のバックエンドが欲しいので、plsは私を啓発します!
ありがとう、copndz
Pulzarraiderがこれを行う1つの方法を説明したので、もう1つの方法を説明します。
ブロックバンドルの方法により、ダッシュボードを非常に強力な方法でカスタマイズできます。あなたは ブロックバンドルドキュメント を同時にフォローすることができます
1。 Copndz\MyBundle\Block\ServiceにStatisticsBlockService.phpを作成します
保存されたデータを使って数学を実行して統計を表示したい:
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 }
はい、可能です。 Sonata Blockを使用するか、独自のコントローラーを使用して実行できます。
controllerを使用する場合、デフォルトのCRUDコントローラーから(1つ以上の)アクションをオーバーロードでき、レンダリングされた結果がどのように表示されるかはユーザーによって異なります。
デフォルトのコントローラー_SonataAdminBundle:CRUD
_をコントローラーに置き換えます管理サービスの定義でAcmeDemoAdminBundle:ProductStatisticsAdminおよびエンティティの削除 CRUD操作なしで統計をレンダリングしようとするため。
_<service id="acme_demo_admin.product_statistics" class="Acme\Bundle\DemoAdminBundle\Admin\ProductStatisticsAdmin">
<tag name="sonata.admin" manager_type="orm" group="statistics_group" label_catalogue="admin" label="Product Statistics" />
<argument />
<argument />
<argument>AcmeDemoAdminBundle:ProductStatisticsAdmin</argument>
</service>
_
管理サービスの作成ProductStatisticsAdmin
in _Acme/Bundle/DemoAdminBundle/Admin/ProductStatisticsAdmin.php
_。 list
アクションのみが必要で、他のCRUD操作は必要ないため、クラスは非常に単純になります。
_<?php
namespace Acme\Bundle\DemoAdminBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Route\RouteCollection;
class ProductStatisticsAdmin extends Admin
{
protected $baseRoutePattern = 'product-statistics';
protected $baseRouteName = 'productStatistics';
protected function configureRoutes(RouteCollection $collection)
{
$collection->clearExcept(array('list'));
}
}
_
コントローラーを作成 _Acme/Bundle/DemoAdminBundle/Controller/ProductStatisticsAdminController.php
_のProductStatisticsAdminControllerと、SonataのCRUDControllerからlistAction()
をオーバーロードします。このアクション内で、DBを呼び出して統計を取得し、テンプレートを使用してそれらをレンダリングできます。
_<?php
namespace Acme\Bundle\DemoAdminBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class ProductStatisticsAdminController extends Controller
{
public function listAction()
{
if (false === $this->admin->isGranted('LIST')) {
throw new AccessDeniedException();
}
//... use any methods or services to get statistics data
$statisticsData = ...
return $this->render('AcmeDemoAdminBundle:ProductStatistics:product_statistics.html.twig', array(
'statistics_data' => $statisticsData,
));
}
}
_
テンプレートの作成 _product_statistics.html.twig
_グラフを生成し、_Acme/Bundle/DemoAdminBundle/Resources/views/ProductStatistics/product_statistics.html.twig
_で統計を表示します
_{% extends base_template %}
{% block javascripts %}
{{ parent() }}
{# put links to javascript libraries here if you need any #}
{% endblock %}
{% block content %}
{# put some html code to display statistics data or use some javascript library to generate cool graphs #}
{% endblock %}
_
実際にブロックを使用することと別々のページを作成することは少し異なります。 OPはsonataadmin内に別のページを作成しようとしていると思います。
コントローラを作成し、そのルートをrouting.yml
ファイルで構成し、URLをsonata adminのように表示する場合は、sonataadminのプレフィックスと同じプレフィックスを設定します。
テンプレートをレンダリングします。ここには2つのトリックがあります。
まず、sonataadminの「レイアウト」テンプレートから拡張する必要があります。 config.yml
で変更した場合は、それに応じてコードを更新してください。 参照
{% extends "SonataAdminBundle::standard_layout.html.twig" %}
これで、ソナタ管理者のメニューバーとフッターがこの新しいページに表示されます。しかし、メニューは空です。メニューを表示するには、コントローラーからテンプレートにadmin_pool
を渡す必要があります。
$admin_pool = $this->get('sonata.admin.pool');
return array(
'admin_pool' => $admin_pool,
// Other variables to pass to template
);
これがあなたの問題に対する別の解決策です: http://blog.eike.se/2014/03/custom-page-controller-in-sonata-admin.html
あなたが達成しようとしていることは、Sonata AdminBundleのSonataBlockBundle部分を使用して実行できると思います。
Sonata管理ダッシュボードのドキュメント http://sonata-project.org/bundles/admin/2-1/doc/reference/dashboard.html
私はそれを自分でやったことはありません。