Вы не передаете параметры своим обратным вызовам слушателя (без расширения ядра). Symfony будет тем, кто его вызовет, и передаст объект события. Если вам нужна дополнительная информация, вы можете создать другой метод, который вызывает другой метод, где вы можете управлять параметрами.
$callable1 = array(new MyWriter, 'write1');
$callable2 = array(new MyWriter, 'write2'); // or $callable2 = array($callable1[0], 'write2');
$sfEventDispatcher->connect('log.write', $callable1);
$sfEventDispatcher->connect('log.write', $callable2);
И ваши методы класса обратного вызова может быть что-то вроде:
class MyWriter
{
public function write($event, $num)
{
// do something
}
public function write1($event)
{
$this->write($event, 1);
}
public function write2($event)
{
$this->write($event, 2);
}
}
В качестве альтернативы, вы можете создать свойства, которые действуют как состояние, что функция записи может проверить:
class MyWriter
{
public $state = 1;
public function write($event)
{
if ($this->state == 1) {
// do this
} else {
// do this instead
}
}
}
Это сложнее, так как вам нужно будет установить состояние до того, как произойдет соответствующее событие, которое может оказаться невозможным, в зависимости от специфики вашей ситуации:
$callable[0]->state = 2;
'is_callable' фактически не вызывается метод, так почему вам нужно передать аргументы метода 'is_callable'? –
Я считаю, что это больше проблема с Symphony, чем любая собственная функциональность PHP, почему бы не расширить метод connect для принятия параметров –