Возможность вернуть дочерний метод из метода родительского класса? - PullRequest
0 голосов
/ 27 марта 2019

Поскольку я довольно новичок в Laravel, я в настоящее время использую очередь и имею следующую проблему с работой. Поскольку API, который я вызываю, может регулировать, мне нужно иметь эту логику для каждого метода, который я вызываю, поэтому я создал родительский (базовый) класс. (не уверен, что это правильный путь, пожалуйста, исправьте меня и здесь, если не так)

Итак, у меня есть JobClass, расширяющий BaseJobClass, который должен обрабатывать создание клиента API.

BaseJob

class BaseJob implements ShouldQueue
{
    protected function performActionOrThrottle($method, $parameters, Customer $customer, Marketplace $marketplace) {
        $client = $this->createClient($customer, $marketplace);
        if (!method_exists($client, $method)) {
            return $this->fail(new \Exception("Method {$method} does not exist in " . get_class($client)));
        }
        try {
            $result = $client->{$method}($parameters);
        } catch (\Exception $exception)
        {
            echo $exception->getMessage().PHP_EOL;
            return $this->release(static::THROTTLE_LIMIT);
        }
        return $result;
    }
}

Работа

class Job extends BaseJob
{

    CONST THROTTLE_LIMIT = 60;
    CONST RETRY_DELAY = 10;

    private $customer;
    private $requestId;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Customer $customer, $requestId = null)
    {
        $this->customer = $customer;
        $this->requestId = $requestId;
        echo "Updating Inventory for {$customer->name}\n";
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $marketplace = Marketplace::findOrFail(5);

        if (!$report = $this->performActionOrThrottle('GetReport', $this->requestId, $this->customer, $marketplace)) {
            echo "Report not available, trying again in " . self::RETRY_DELAY;
            return $this->release(self::RETRY_DELAY);
        }

        ... 
        handle Data
        ...

        return;
    }
}

Чтобы завершить работу, мне нужно вернуть метод handle (). Как я могу вернуть метод handle из родительского метода, не проверяя возвращаемое значение и не осуществляя его возвращение? Если бы я это сделал, нет смысла иметь того родителя, который должен содержать всю логику, необходимую мне для нескольких заданий.

...