I have an unnecessarily perplexing situation here. I'm simply trying to create a method that checks an events transition, creates a $guardMethod
variable that will look something like guardToSomePlace
and then if that method exists, call it. Here is the code for that concept:
<?php
namespace App\Listeners;
use App\Models\BugTypes\Bug;
use Symfony\Component\Workflow\Event\GuardEvent;
class BugWorkflowSubscriber
{
/**
* Handle workflow guard events.
*
* @param \Symfony\Component\Workflow\Event\GuardEvent $event
*/
public function onGuard(GuardEvent $event)
{
$transition = $event->getTransition();
$guardMethod = 'guard' . studly_case($transition->getName());
if (method_exists($this, $guardMethod)) {
$this->$guardMethod($event);
}
}
/**
* Guards the to_on_hold transition
*
* @param \Symfony\Workflow\Event\GuardEvent $event
*
* @return void
*/
private function guardToOnHold(GuardEvent $event)
{
dd('why is it getting here for other transitions?');
}
/**
* Register the listeners for the subscriber.
*
* @param \Illuminate\Events\Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
'workflow.bug.guard',
'App\Listeners\BugWorkflowSubscriber@onGuard'
);
$events->listen(
'workflow.bug.entered.*',
'App\Listeners\Workflow\Bug\OnEntered'
);
}
}
It is calling the guardToOnHold
method for multiple transitions, despite the fact that I can dd $event->getTransition()
and it is the correct transition and if I dd method_exists($this, $guardMethod)
it is false for any/all methods besides guardToOnHold
, as that's the only one that would exist after I create the $guardMethod
variable. If I dd method_exists($this, $guardMethod)
before the if statement it is false, but dd-ing it inside the if statement with the same event/transition gets into the if statement and dd's true
. This is Laravel 5.7 using the Brexis/Laravel Symfony Workflow package. The transition on the event is always what I expect it to be. $event->getTransition()
always returns one Transition Object with the correct name, froms and tos.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire