1

まず、これに関して多くの質問と解決策があることを理解していますが、私の問題を解決するものは見つかりませんでした.

要約すると、Html ヘルパーは正しく逆ルーティングされておらず、次のような URL ではありません。

http://website.com/user_of_website/slug_name

次のような URL を取得します。

http://website.com/things/view/username:user_of_website/slug:a_thing

これが私のルーター設定です:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

//User routes
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/logout', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/register', array('controller' => 'users', 'action' => 'add'));

Router::connect('/users/:action/*', array('controller' => 'users')); 
Router::connect('/things/:action/*', array('controller' => 'things')); 

Router::connect(
    '/:username/:slug',
    array(
        'controller' => 'things',
        'action' => 'view'
    ),array(
        'username' => '[a-zA-Z0-9_]+',
        'slug' => '[a-zA-Z0-9_]+',
        'pass'=>array(
            'username',
            'slug'
        )
    )
);
Router::connect('/:userName', array('controller' => 'things', 'action' => 'user'),array('pass'=>array('userName'))); 

そして私のHtmlヘルパー:

echo $this->Html->link('View', array(
    'controller' => 'things',
    'action' => 'view',
    'username' => 'user_of_website',
    'slug' => 'a_thing'
),array(
    'class' => 'text-warning'
));

私は自分が間違っていることを本当に見ることができません。どんな助けでも大歓迎です。

NB、私は CakePHP 2.3 を使用しています

4

1 に答える 1

1

の「通常の」ルートを無効にすると機能するかどうか試しましたthingsか? 例/things/:action/*

私の推測では、ワイルドカードのため、このルートは URL にも一致し、カスタム ルートの前に定義されているため、代わりに一致します。

これで問題が解決した場合は、そのルートを「カスタム」ルートの下に移動してみてください。

于 2013-02-26T22:40:43.560 に答える