ZendFramework2 でのルーティング設定名にスラッシュ(/)を使ってはいけない
zf2で複数モジュールを使う際にあるモジュール設定(module.config.php)のルーティング設定名で以下のようにスラッシュを使っていました。
module.config.php
'router' => [
'routes' => [
'/api/test' => [
'type' => Segment::class,
'options' => [
'route' => '/api/test[/:action]',
'defaults' => [
'controller' => Controller\TestController::class,
'action' => 'index',
],
],
],
],
],
ルーティング設定は動作していたのですが、あるControllerのリンク生成でPhpRenderer::url($name = null, array $params = array(), $options = array(), $reuseMatchedParams = false)
を使ったらうまく動作しませんでした。
デバッグして確認したところurl()
の第一引数からmodule.config.phpのルーティング設定名(/api/test)を検索するのだけど第一引数をexplode('/')
してから検索していたので引っかからなかったようです。
Zend\Mvc\Router\Http\TreeRouteStack.php
public function assemble(array $params = array(), array $options = array())
{
if (!isset($options['name'])) {
throw new Exception\InvalidArgumentException('Missing "name" option');
}
$names = explode('/', $options['name'], 2);
$route = $this->routes->get($names[0]);
・・・
}
ルーティング設定名にスラッシュを使えないことは分かったけど、モジュールによってコンテキストパスを分けたかったのでどんな命名規則にしようか悩んだところそれっぽい例があったのでハイフンでつなぐこととしました。
module.config.php
'router' => [
'routes' => [
'api-test' => [ // ★修正箇所
'type' => Segment::class,
'options' => [
'route' => '/api/test[/:action]',
'defaults' => [
'controller' => Controller\TestController::class,
'action' => 'index',
],
],
],
],
],
Author And Source
この問題について(ZendFramework2 でのルーティング設定名にスラッシュ(/)を使ってはいけない), 我々は、より多くの情報をここで見つけました https://qiita.com/zateon/items/63e640aec721dd9c89c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .