このstackoverflow question 15077075に基づいて、アプリケーションに正規表現ベースのルートがあることを達成したので、これをビューと編集アクションに渡すことができます。
- app/123 - アプリ コントローラー ビュー アクション (記事 ID で取得)
- app/name-of-article - アプリ コントローラー ビュー アクション (記事名で取得)
- app/123/edit - アプリ コントローラー編集アクション (記事 ID)
- app/name-of-article/edit - アプリ コントローラー編集アクション (記事名)
- app/search/{search-string} - アプリ コントローラーの検索アクション (現在、スペースと特殊文字を含まない検索文字列のみを受け入れます)
これは私が以下のコードで達成したもので、上記のリンクのコードに似ています:
'app' => array(
'type' => 'literal',
'options' => array(
'route' => '/app',
'defaults' => array(
'controller' => 'App\Controller\App',
'action' => 'index',
),
),
'may_terminate' => true,
),
'view' => array(
'type' => 'regex',
'options' => array(
'regex' => '/app/(?<view>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'App\Controller\App',
'action' => 'view',
),
'spec' => '/app/%view%',
),
'priority' => -1000,
),
'edit' => array(
'type' => 'regex',
'options' => array(
'regex' => '/app/(?<view>[a-zA-Z0-9_-]+)/(?<edit>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'App\Controller\App',
'action' => 'edit',
),
'spec' => '/app/%view%/%edit%',
),
'priority' => -1000,
),
私は2つの1つの問題を抱えています.1つ目は、URLビューヘルパーがルートを認識しないことです
$controller = app
$action = recent
$this->url( $controller, array( 'action' => $action ) )
/app/recent の代わりに /app を出力するだけです。
$action = 'search'
または$action = 'new'
/app のみを印刷する場合にも同じことが発生します
2つ目は、検索がコントローラーのアクションに認識され、スペースや特殊文字を入れると失敗することだけです
検索キーの制約に \s を追加しようとすると ( '[\sa-zA-Z0-9_-]+' )、編集機能にルーティングされます
探索ルートはこんな感じ
これへのルートを編集したところ、うまくいきました
'search' => array(
'type' => 'literal',
'options' => array(
'route' => '/app/search',
'defaults' => array(
'controller' => 'App\Controller\App',
'action' => 'search',
),
),
'may_terminate' => true,
'child_routes' => array(
'search' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:searchkey]',
'constraints' => array(
'searchkey' => '[a-zA-Z0-9_\+-]+'
),
'defaults' => array(
'action' => 'search'
),
),
),
),
),
コードスニペットが必要な場合は、何が欲しいかが明確であることを願っています。