0

全て、

現在、アプリでスラッグを設定しており、リンクとして以下を生成しています。

http://www.domain.com/article/my-first-news-article

そして、これは私がそれを達成するために使用している現在のルートであり、代わりに:の代わりにview受け入れることに加えて:slugid

Router::connect('/article/*',array('controller' => 'articles', 'action' => 'view'));

ただし、次のようにURLに公開日を追加することで、これをもう少し改善したいと思いました。

http://www.domain.com/article/2012/06/27/my-first-news-article

CakePHPマニュアルから次のコードがありますが、機能していないようです。

        Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'year' => '[12][0-9]{3}',
            'month' => '0[1-9]|1[012]',
            'day' => '0[1-9]|[12][0-9]|3[01]'
        )
    );

このため、ビューに渡される日付は本当に気にしません。渡されるナメクジだけが気になります。次にfunction view($slug)、記事を見つけて表示するために使用します。ただし、URLはhttp://www.domain.com/2012/06/27/slug-slug-slug

ありがとうございました....

4

3 に答える 3

1

完全を期すために、また他の誰かがこれに興味を持っている可能性があるため、同様の問題に対する私の解決策を示します。

URLを次の形式で取得したい

http://mydomain.com/blog/2012/06/slug-slug-slug

すなわち /blog/yyyy/mm/slug

このために、私は使用します

// view a post by year and month and title
Router::connect('/blog/:year/:month/:title/*', array(
  'controller' => 'posts',
  'action' => 'view'
), array(
  'year' => '[12][0-9]{3}',
  'month' => '0[1-9]|1[012]',
  'title' => '[a-z0-9-]+'
));

以下のルールを使用すると、正しい形式が入力されていることを確認できます。また、ユーザーが & " % などの値をスラッグとして入力できないようにします。

タイトルの後の /* は、ブログ エントリが複数のページhttp://mydomain.com/blog/2012/06/slug/page:2(

また、「pass」配列を設定する必要がないことにも気付きました (少なくとも CakePHP 2.0 では)。$this -> request -> params['year'] などを介してパラメーターに直接アクセスできます。

于 2012-06-28T20:12:18.270 に答える
1

$this->Html->link() 呼び出しは、リンクで日付を使用したい場所でどのように見えるでしょうか?

そこに必要なパラメーターを追加していますか?

$this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));
于 2012-06-28T09:08:04.570 に答える
0

さらなる研究と試行錯誤の末、私はそれを理解することができました。

次のルートは、次のような URL を受け入れるために機能します。

http://www.mydomain.com/article/2009/06/10/my-first-article-in-mydomain-dot-com.

実際のところ、日付がどのように設定されているかは問題ではなく、引き続き機能します。それはまた、

http://www.mydomain.com/article/06/10/2012/my-first-article-in-mydomain-dot-com

Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'pass' => array('slug')
        )   
    );
于 2012-06-28T13:55:33.093 に答える