Получить параметр в маршрутизации — Slim Framework 3

Как я могу получить параметр в этом случае?

$this->get('/{id}', function($request, $response, $args) {
  return $response->withJson($this->get('singleSelect'));
});

$this->appContainer['singleSelect'] = function ($id) {
  return $this->singleSelect($id);
};

public function singleSelect($id) {
  return $id;
}

Заранее спасибо.

ОБНОВЛЕНИЕ

Решение в моем случае:

$app->group('/id', function () {
    $this->get('/{id}', function($request, $response, $args) {
        $this['container'] = $args; //work with $args inside the container
        return $this->singleSelect($id);
    });
});

person José Érico    schedule 26.01.2016    source источник


Ответы (1)


Если я правильно понимаю, сервисы не имеют доступа к параметрам маршрутов. Все, что вы можете получить, это сам контейнер, но может быть сложно получить информацию об аргументах из него (что-то вроде $container->getRoutes()['<routename>']->getArguments(), где <routename> маршрутизатор может иметь подмаршруты и т. д.)

ИМХО, ваш код должен выглядеть так:

$container = new \Slim\Container;
$app = new \Slim\App($container);

class Example {
    public function singleSelect($id) {
        return $id;
    }
}

$container['example'] = function () {
    return new Example();
};

$app->group('/id', function () {
    $this->get('/{id}', function($request, $response, $args) {
        return $response->withJson($this->example->singleSelect($args['id']));
    });
});

$app->run();
person CrazyCrow    schedule 30.01.2016
comment
Другое решение приведено выше, в моем обновлении вопроса. Спасибо. - person José Érico; 02.02.2016