0

私のビューには、投稿の日付とスラッグを渡すことで投稿を呼び出す次のリンクがあります。

<?php echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', 'date'=>date('Y/m', strtotime($post['Post']['datetime'])), 'slug'=> $post['Post']['slug'])); ?></h2> <h4><?php echo $post['Post']['datetime']; ?><

ご覧のとおり、strtotime を使用して、URL で使用する日時をきれいにしています。

データベースから投稿を引き出すためにコントローラーで実際に日付を使用するのではなく、スラッグだけを使用するので、それほど重要ではありません。

ただし問題は、日付に が/含まれているため、ルーターが混乱し、URL の 2 つの別個の部分であると見なすことです。これを修正するにはどうすればよいですか?

私のルートは次のとおりです。

Router::connect('/news/:date/:slug',
                array('controller' => 'posts', 'action' => 'view'),
                array(
                    //'date'   => '[A-Za-z0-9\._]+',
                    'slug' => '[A-Za-z0-9\._]+',
                    'pass' => array('date', 'slug')
                ));
4

1 に答える 1

1

Cake 2を使用していますか?? もしそうなら、本が言うように、これを試すことができます:

グリーディ スターに加えて、トレーリング スター構文/*もあります。/**末尾に二重スターを使用すると、URL の残りの部分が 1 つの渡された引数としてキャプチャされます。これは、/ を含む引数を使用する場合に便利です。

<?php
Router::connect(
    '/pages/**',
    array('controller' => 'pages', 'action' => 'show') );
?>

/pages/the-example-/-and-proof の受信 URL は、the-example-/-and-proof の 1 つの渡された引数になります。

しかし、最初にスラッグを渡す必要があると思います。

/それ以外の場合は、 by -(またはその他のもの)を変更できます。ただし、それらを保持したい場合は、次のように、日付をルート内の個別のパラメーターとして宣言できます。

Router::connect(
    '/news/:year/:month/:day',
    array('controller' => 'posts', 'action' => 'view', 'day' => null),
    array(
        'year' => '[12][0-9]{3}',
        'month' => '0[1-9]|1[012]',
        'day' => '0[1-9]|[12][0-9]|3[01]'
    )
);
于 2012-09-01T11:56:40.053 に答える