ハイフン文字が含まれている場合、KohanaでURLをルーティングする一般的な方法はありますか?

StackOverflow https://stackoverflow.com/questions/1004716

  •  05-07-2019
  •  | 
  •  

質問

KohanaはそのようにURLを自動的に設定します

http://www.example.com/controller/method/argument1 / argument2 / etc

今、URLで単語を区切るためにダッシュを使用したいのですが、そのようなアドレスがあります

http://www.example.com/business-hub

コントローラーのタイトルはBusinessHub_Controllerです。面倒なのは、/ business-hub /がBusinesHubコントローラーに一致するためです。application/ configフォルダーの下のroutes.phpにカスタムエントリを追加する必要があります。また、 every メソッド用に1つ追加する必要があるようですが、これは本当に面倒です。たとえば、次の抜粋です。

$config['business-hub'] = 'businesshub/index/';

$config['business-hub/logout'] = 'businesshub/logout';

$config['business-hub/media-releases'] = 'businesshub/mediareleases';

明らかに、これは本当に迷惑です。とにかく私はKohanaにURLをキャメルケース名に変換するように伝えることができますか?

$urlController = 'business-hub';

$correctController = str_replace('-', ' ', $urlController);

$correctController = ucwords($correctController);

$correctController = str_replace(' ', null, $correctController);

$correctController = $correctController . '_Controller';
役に立ちましたか?

解決

単にダッシュを削除するのではなく、アンダースコアに変換します。そして、私はフックを使用してそれをやります。 config / config.phpでフックが有効になっていることを確認してから、たとえばdashes_to_underscores.phpという名前のフックでファイルを作成します。

function convert_dashes_to_underscores_in_url()
{
    Router::$current_uri = str_replace('-', '_', Router::$current_uri);
}

Event::add_before(
    'system.routing',
    array('Router', 'setup'),
    'convert_dashes_to_underscores_in_url');

他のヒント

camelCaseバリアントについてはわかりませんが、このようなものは動作します

$config['(a-z)+-?(a-z)*/(a-z)+-?(a-z)*'] = '$1$2/$3$4';

kohanaのルート部分は正規表現です。

もちろん、これはあなたが提供したケースに限定されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top