Masalah dengan acara dalam Symfony2
天蓬老师
天蓬老师 2017-05-16 16:44:46
0
1
539

Saya melihat bab acara di symfony hari ini dan melakukan percubaan sendiri, tetapi ada satu perkara yang saya tidak begitu faham.
Saya mula-mula menentukan kelas penghitungan Eent untuk mengurus semua acara

<?php
namespace Wolehao\HomeBundle\Event;


final class Events{
  const HOMEPAGE_VISIT = "home.homepage_visit";
}

Sesuatu acara ditakrifkan dalam HomepageBundle

<?php
namespace Wolehao\HomeBundle\Event;
// 这个是sf为你提供的一个基础类
use Symfony\Component\EventDispatcher\Event;

// 你的事件类
class HomepageVisit extends Event {
  public $container;
  public function __construct($container) {
    $this->container = $container;
  }
}

Kemudian pendengar ditakrifkan dalam FileBundle


<?php namespace Wolehao\FileBundle\EventListener; use Wolehao\HomeBundle\Event\HomepageVisit; class FileListener { public function onHomepageVisit(HomepageVisit $event) { $event->container->get("logger")->info("我执行了"); // ... } }

Daftar perkhidmatan dalam perkhidmatan.xml

    <services>
        <service id="file.listener" class="Wolehao\FileBundle\EventListener\FileListener">
                <tag name="kernel.event_listener" event="home.homepage_visit" method="onHomepageVisit"/>
        </service>
    </services>

Akhirnya saya mencetuskan acara dalam pengawal HomepageBundle

<?php

namespace Wolehao\HomeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Wolehao\HomeBundle\Event\HomepageVisit;
use Wolehao\HomeBundle\Event\Events;
use Wolehao\FileBundle\Event\Listener;

class DefaultController extends Controller
{
    /**
     * @Route("/home/{name}")
     * @Template()
     */
    public function indexAction($name)
    {

      $event = new HomepageVisit($this->container);
      // 在controller里取事件分发器
      $dispatcher = $this->get('event_dispatcher');
      $dispatcher->dispatch(Events::HOMEPAGE_VISIT, $event);
      return array('name' => $name);
    }

}

Mula-mula, saya mengaksesnya melalui http://localhost/fm/web/app_dev.php/home/index
Boleh mencetak log "Saya melaksanakan" dengan betul
Semuanya kelihatan baik-baik saja, menunjukkan bahawa acara itu berjaya dicetuskan dan dilaksanakan

Kini dengan mengklik bar nyahpepijat, item acara adalah seperti yang ditunjukkan di bawah:

Apa yang saya tidak faham ialah mengapa home.homepage_visit terdapat dalam Not Called Listeners, tetapi ia jelas dilaksanakan?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(1)
曾经蜡笔没有小新

Apakah versi khusus symfony 2 anda?

Jika anda menulis log, ini bermakna kod berkaitan acara anda adalah sah.

Maklumat yang dipaparkan dalam profiler (bar debug) dikumpul melalui pengumpul data Bagi sebab panggilan kepada pendengar tidak direkodkan, anda perlu mengetahui lebih banyak butiran untuk memahami token dan maklumat profiler secara terperinci.

Selain itu, jangan terus menyuntik bekas ke dalam acara, kerana kebergantungan ini terlalu luas.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan