2

Symfony と Sonata を使用して管理インターフェイスを作成しました。今のところ、すべてが正常に機能しています。

ここで、このチュートリアルに従って、フックがどのように機能するかをテストしたいと思います: http://sonata-project.org/bundles/admin/master/doc/reference/ Saving_hooks.htmlこの方法は機能します。私がやりたいことは、管理インターフェイスを介してオブジェクトを作成するすべてをログに記録することです。これが私のAdminClassコードの最初の部分です(動作中):

namespace AAA\AdminBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Validator\ErrorElement;

class CompteAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('prenom')
        ->add('nom')
        ->add('fonction')
    ;
}

そして、ここに次の部分があります(機能していません):

public function postPersist($logger)
{
    $logger = $this->get('logger');
    $logger->err('Une erreur est survenue');
}

オブジェクトを追加しようとすると、次のログ エラーが発生します。

PHP Fatal error:  Call to undefined method INERIS\AdminBundle\Admin\CompteAdmin::get()

また

PHP Fatal error:  Call to undefined method INERIS\AdminBundle\Entity\Compte::err()

行にコメントするかどうかによって異なります。

ログに書き込むために、Symfony は Monolog を使用します。私はこのチュートリアルhttp://symfony.com/doc/current/cookbook/logging/monolog.htmlに従いましたが、 $logger はそこではなくコントローラーに宣言する必要があるため、明らかに間違っています。

そのときの解き方がわかりません。

モノログを有効にするために、AdminClass の先頭に追加が欠落している可能性があります。私の関数 postPersist が間違ったオブジェクトを取ったのかもしれません。

どんなヒントも役に立ちます;)

編集:解決しました。以下の投稿を確認してください。

4

2 に答える 2

2

追加する必要があります

 calls:
   - [ setLogger, ['%logger%'] ]

管理者のサービス定義 (通常は admin.yml 内) に追加し、メソッドを *Admin クラスに追加します。

use Symfony\Bridge\Monolog\Logger

....

public function setLogger(Logger $logger) {
    $this->logger = $logger;
}

その後、通常どおりログインできます

$this->logger->err('Une erreur est survenue');

アップデート

コメントで議論した後、これは *Admin クラスでロガーを取得する正しい方法です。

public function postPersist($logger)
{
    $logger = $this->getConfigurationPool()->getContainer()->get('logger');
    $logger->err('Une erreur est survenue');
}    

SonataAdminBundle は標準のサービス注入/解決システムを使用していないようです

于 2013-11-14T16:41:08.983 に答える
0

おそらく、次の方法でロガー オブジェクトを取得する必要があります。

$logger = $this->getContainer()->get('logger');

それが機能しない場合は、最初にこれを追加します。

use Symfony\Component\HttpKernel\Log\LoggerInterface;
于 2013-11-14T16:35:35.763 に答える