Zend Expressive Route с необязательным параметром - PullRequest
0 голосов
/ 16 января 2019

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

, поэтому мой маршрут:

$app->get("/companies", \App\Handler\CompanyPageHandler::class, 'companies');

Мой обработчик для этого маршрута:

use App\Entity\Company;
use App\Entity\ExposeableCollection;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class CompanyPageHandler extends AbstractHandler
{
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $categories = new ExposeableCollection();
        foreach (['test', 'test1', 'test3'] as $name) {
            $category = new Company();
            $category->setName($name);

            $categories->addToCollection($category);
        }

        return $this->publish($categories);
    }
}

Получая этот маршрут /companies, я получаю ожидаемую коллекцию

[{"name":"test"},{"name":"test1"},{"name":"test3"}]

Так что теперь я меняю маршрут

$app->get("/companies[/:search]", \App\Handler\CompanyPageHandler::class, 'companies');

Все хорошо, когда япросмотр до /companies.Но если я попробую необязательный параметр /companies/test1, то получу ошибку

Невозможно получить http://localhost:8080/companies/test1

Мой раздел требует композитора:

"require": {
    "php": "^7.1",
    "zendframework/zend-component-installer": "^2.1.1",
    "zendframework/zend-config-aggregator": "^1.0",
    "zendframework/zend-diactoros": "^1.7.1 || ^2.0",
    "zendframework/zend-expressive": "^3.0.1",
    "zendframework/zend-expressive-helpers": "^5.0",
    "zendframework/zend-stdlib": "^3.1",
    "zendframework/zend-servicemanager": "^3.3",
    "zendframework/zend-expressive-fastroute": "^3.0"
},

В Zend Framework 2 и Symfony4 это определение маршрута работает нормально.Так что я в замешательстве.Почему мой необязательный параметр не работает?

1 Ответ

0 голосов
/ 16 января 2019

Это потому, что вы используете https://github.com/nikic/FastRoute маршрутизатор и правильный синтаксис будет:

$app->get("/companies[/{search}]", \App\Handler\CompanyPageHandler::class, 'companies');

или быть более строгим и проверить параметры поиска примерно так:

$app->get("/companies[/{search:[\w\d]+}]", \App\Handler\CompanyPageHandler::class, 'companies');
...