1

私は次のコードを持っていますroutes.php

Router::connect('/c/details/:id/:slug',
    array('controller' => 'cars'),
    array('pass' => array('id', 'slug'))
);

アクセスしようとするhttp://domain.com/c/details/123/abcと動作します。ただし、削除するとabc(つまり、スラッグ)、CakePHPはアクション123(アクションではなくID)にアクセスしようとします。

Error: The action 123 is not defined in controller CarsController

/c/details/:id/:slug/:action/*1.2(ええ、かなり古い)から2.2.1にアップグレードする前に持っていたものを使用し、それが正常に機能していた場合、CakePHP123は、スラッグがあるかどうかに関係なく、アクションにアクセスしようとします。

スラッグのないURLは、CakePHPをアップグレードする前は常に機能し、コントローラーにあるコードを使用すると、URLにスラッグがない場合、正しいURLにリダイレクトされます。

編集:チェックしたところ、ナメクジを提供しないと全体がシフトしているようです。c無視され、detailsコントローラーに123なり、アクションになります。

[request] => CakeRequest Object
    (
        [params] => Array
            (
                [plugin] => 
                [controller] => details
                [action] => 123
                [named] => Array()
                [pass] => Array()
                [isAjax] => 
            )

正しいのはいつですか、そしてそれは私がナメクジを提供した場合に私が得るものです:

[request] => CakeRequest Object
    (
        [params] => Array
            (
                [plugin] => 
                [controller] => cars
                [action] => index
                [named] => Array()
                [pass] => Array
                    (
                        [0] => 123
                        [1] => abc
                    )

                [id] => 123
                [slug] => abc
                [isAjax] => 
            )

今この問題を引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

2

スラッグをオプションにする場合は、2つのルートが必要になる場合があります(不明)。いずれの場合も、action各ルートにもキーを追加します。

Router::connect('/c/details/:id',
    array('controller' => 'cars', 'action' => 'details'),
    array('pass' => array('id'))
);

Router::connect('/c/details/:id/:slug',
    array('controller' => 'cars', 'action' => 'details'),
    array('pass' => array('id', 'slug'))
);
于 2012-08-07T05:15:55.307 に答える