1

私は次の考えを持っています: 特定のコントローラーでデフォルトのプレフィックスを定義できるようにしたいと考えています。したがって、CitiesController のデフォルトのプレフィックスは を使用してすべてのアクションを実装します"admin" prefix ("admin_index", "admin_add", etc.),が、ProvincesController は を使用してすべてのアクションを実装するとします。

"superadmin" prefix ("superadmin_index", "superadmin_add", etc.)

これの問題は、「都市のもの」にリンクするたびに、「admin」=>「true」を指定する必要があることです。「州のもの」にリンクしたいときはいつでも指定する必要があります

"superadmin" => "true".

最初はかなりの作業ですが、都市の接頭辞を「admin」から「superadmin」に変更したいと決めたら、さらに手間がかかります。

だから私は、どういうわけか次の行に沿って何かをするべきかどうか疑問に思っていました:

class CitiesController extends AppController {
    var $defaultPrefix = "admin"
}

そして、HTML ヘルパー リンク関数で、次のようにします。

class LinkHelper extends AppHelper {

    public $helpers = array('Html');

    function myDynamicPrefixLink($title, $options) {
        // check whether prefix was set (custom function that checks all known prefixes)
        if (! isPrefixSet($options)) {
            // no clue how to get the controller here
            $controller = functionToGetControllerByName($options['controller']);

            // check whether controller has a defined default prefix 
            $prefix = $controller->defaultPrefix;
            if ($prefix) {
                // set the given prefix to true
                $options[$prefix] = true;
            }

        // use HTML helper to get link
        return $this->Html->link($title, $options);
    }
}

ヘルパーから指定された名前のコントローラーに動的に取得する方法がわかりません。

別のオプションは、デフォルトのプレフィックスを別の場所に保存することですが、今のところ、これに最適な場所は任意のコントローラー自体にあると思います。

別のアイデアは、コントローラーだけでなく、コントローラーとアクションの両方に依存するルックアップ機能を持たせることです。

4

1 に答える 1

1

Router::connect を使用してデフォルトを提供し (Github のコードとドキュメントを参照:リンク)、特定のコントローラーやアクションのデフォルト プレフィックスを指定できるはずです。

ただし、現在の Router よりも柔軟性が必要な場合は、別の Route クラスを指定して Router::connect の使用を拡張できます。

Router::connect(
    '/path/to/route',
    array('prefix' => 'superadmin'),
    array('routeClass' => 'MyCustomRouter')
);

この例は、 CakePHP のドキュメントで見ることができます。

于 2012-08-06T01:06:19.293 に答える