1<?php
2
3namespace League\Tactician\Exception;
4
5/**
6 * Thrown when a specific handler object can not be used on a command object.
7 *
8 * The most common reason is the receiving method is missing or incorrectly
9 * named.
10 */
11class CanNotInvokeHandlerException extends \BadMethodCallException implements Exception
12{
13    /**
14     * @var mixed
15     */
16    private $command;
17
18    /**
19     * @param mixed $command
20     * @param string $reason
21     *
22     * @return static
23     */
24    public static function forCommand($command, $reason)
25    {
26        $type =  is_object($command) ? get_class($command) : gettype($command);
27
28        $exception = new static(
29            'Could not invoke handler for command ' . $type .
30            ' for reason: ' . $reason
31        );
32        $exception->command = $command;
33
34        return $exception;
35    }
36
37    /**
38     * Returns the command that could not be invoked
39     *
40     * @return mixed
41     */
42    public function getCommand()
43    {
44        return $this->command;
45    }
46}
47