顧客名を取得し、データベースを検索して顧客と一致するコントローラーとアクションがあります。ミドルネームを持っている顧客もいれば、持っていない顧客もいます。
これには次の2つのルートがあります。
'full-name' => array(
'type' => 'regex',
'options' => array(
'regex' => '/(?<title>Mr|Miss|Mrs|Ms)/(?<firstname>[a-zA-Z0-9_-]+)/(?<middlename>[a-zA-Z0-9_-]+)/(?<lastname>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'Application\Controller\Customers',
'action' => 'index',
),
'spec' => '/%firstname%/%middlename%/%lastname%'
)
),
'name' => array(
'type' => 'regex',
'options' => array(
'regex' => '/(?<title>Mr|Miss|Mrs|Ms)(?<firstname>[a-zA-Z0-9_-]+)/(?<lastname>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'Application\Controller\Customers',
'action' => 'index',
),
'spec' => '/%firstname%/%lastname%'
)
),
両方を1つの正規表現ルールに組み合わせる方法があるかどうか疑問に思いましたが、ミドルネームに有効なものは見つかりませんでした。私は次のようないくつかのことを試しました:
(?<middlename>[a-zA-Z0-9_-]?)
(?<middlename>[a-zA-Z0-9_-]+|^$)
しかし、ミドルネームなしで試してみると、一致するルートがないという苦情がありました。もちろん、動作するのでそのままにしておくこともできますが、両方のルートを1つにまとめることができればいいのですが。
誰かがこれを行う方法を知っていますか?
編集:私はもともと私が実際に必要とするものと比較してコードを少し単純化しましたが、これは正規表現のオプションの値についての私の質問に答えない解決策につながりました。セグメントルートを使用できない理由を反映するようにコードを変更しました。
参考までに、これは私の最初のコードでした。
'full-name' => array(
'type' => 'regex',
'options' => array(
'regex' => '/Customer/(?<firstname>[a-zA-Z0-9_-]+)/(?<middlename>[a-zA-Z0-9_-]+)/(?<lastname>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'Application\Controller\Customers',
'action' => 'index',
),
'spec' => '/%firstname%/%middlename%/%lastname%'
)
),
'name' => array(
'type' => 'regex',
'options' => array(
'regex' => '/Customer/(?<firstname>[a-zA-Z0-9_-]+)/(?<lastname>[a-zA-Z0-9_-]+)',
'defaults' => array(
'controller' => 'Application\Controller\Customers',
'action' => 'index',
),
'spec' => '/%firstname%/%lastname%'
)
),
ありがとう!