Люмен: Маршрутизация с использованием действия - PullRequest
0 голосов
/ 03 декабря 2018

В моей компании мы используем каркас, построенный поверх Lumen.Мы не пишем маршруты.мы пишем действия.

Так, например:

app/api/Food/AddFoodAction.php
app/api/food/EditFoodAction.php

В Почтальоне вы нажимаете, если хотите добавить еду

{{host}}/api/food/AddFood
{{host}}/api/food/EditFood

Типичное действие выглядит следующим образом

class AddFoodAction
{
    protected $verbs = ['POST'];    
    public $inputRules = [
    'name' => 'required',
    'description' => ''
    ];
    public function execute()
    {
        $name = $this->request->get('name');

        try {
            ...

            return $this->response->statusOk();
        }
        catch(\Exception $ex) {
            return $this->response->statusFail("");
        }
    }
}

Мне просто интересна часть маршрутизации, идея никогда не писать маршруты, только действия.Я хотел бы использовать ту же концепцию в других проектах без необходимости использования инфраструктуры, которую использует моя компания.

Знаете ли вы, как это делается?Я искал динамическую маршрутизацию, но это не динамическая маршрутизация. Вы знаете, как называется используемая концепция?

1 Ответ

0 голосов
/ 03 декабря 2018

Полагаю, это делается с помощью динамических имен классов, где у вас будет одна «реальная» конечная точка, которая перехватывает все параметры, а затем с этой информацией вы сможете сгенерировать полный путь к классу.

Например, если вы перейдете к {{host}}/api/food/AddFood, ваш код извлечет часть /food/AddFood.Затем эта часть анализируется, и получается app/api/Food/AddFoodAction (т. Е. С помощью верблюдов и префикса с /app/api), что соответствует пространству имен + имя класса.

Если это хранится в переменной, вы можете динамически вызывать этот класс, где он будет производить что-то вроде этого:

// this would be dynamically build, but is hardcoded to illustrate the example
$className = "\app\api\Food\AddFoodAction";
$action = $className();
$action->execute();

Надеюсь, это поможет вам, если у вас возникнут вопросыможете спросить!

PS обратите внимание, что имя должно использовать пространство имен , а не путь к папке

...