0

この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'
                ),
            ),
        ),
    ),
),

コードスニペットが必要な場合は、何が欲しいかが明確であることを願っています。

4

1 に答える 1