4

次の構成ではthisisatest、URL がthis-is-a-test/action? 独自の Router クラスを構築/拡張する必要がありますか?

<?php
return array(
    '_root_'  => 'home/index',  // The default route
    '_404_'   => 'error/404',    // The main 404 route

    //'hello(/:name)?' => array('welcome/hello', 'name' => 'hello')
);

/* end of config/routes.php */
4

4 に答える 4

4

これを実装する方法は、次を使用して拡張することでした\Fuel\Core\Router。ルーター クラスは、ルーター クラス メソッドを変更するのではなく、 security.uri_filterfromのメソッドを介して渡された URI で動作します。ルーター拡張機能でその配列にコールバックを追加しました。config.php

class Router extends \Fuel\Core\Router
{
    public static function _init()
    {   
        \Config::set('security.uri_filter', array_merge(
            \Config::get('security.uri_filter'),
            array('\Router::hyphens_to_underscores')
        ));
    }

    public static function hyphens_to_underscores($uri)
    {
        return str_replace('-', '_', $uri);
    }
}

app/config/config.phpクロージャーまたはクラス メソッドまたは関数の呼び出しを使用して、構成配列に直接簡単に追加することもできます。

これの欠点は、/path_to_controller/action と /path-to-controller/action の両方が機能し、検索スパイダーにこれを示さない限り、重複コンテンツの SEO 問題が発生する可能性があることです。これは、両方のパスがどこか、つまりサイトマップなどで参照されていることを前提としています<a href="">

于 2012-07-25T19:53:14.357 に答える
1

ルータークラスにはデフォルトで機能がないと思います。実際、独自のルーター クラスを拡張または作成する必要があります。

于 2012-07-25T19:54:39.143 に答える
0

イベント後ということはわかっていますが、これは将来これを望む人のためのものです...

アンダースコアとサブフォルダーの混同を避けるために、ハイフンをキャメルケースに変換して、URLthis-is-a-testを class にルーティングすることを好みましたController_ThisIsATest

の「セキュリティ」設定の「uri_filter」に匿名関数を追加することで、これを(FuelPHP 1.4で)行いましたfuel/app/config/config.php

'security' => array(
    'uri_filter' => array('htmlentities',
        function($uri) { 
            return str_replace(' ', '', ucwords(str_replace('-', ' ', $uri))); 
        }),
),
于 2012-11-11T22:03:10.533 に答える
0

これには security.uri_filter 構成設定を使用できます。

ハイフンをアンダースコアに変換する関数を作成すれば完了です。そのためのルーター クラスを拡張する必要はありません。関数名 (クラスまたはブートストラップで定義された関数のいずれか) を config に指定するだけで完了です。

于 2012-07-26T14:34:10.090 に答える