どのようにcakephpのコントローラアクションからURLを設定するには?

私はソーシャルネットワーキングサイトを作っていました。それぞれのプロフィールページは、親しみやすいURLを使用して表示する必要があります。

今のようなwww.siteprof.com/profile/23
私はこのURLの最後にaditioanl文字列 'jake-web-developer'を追加する必要があります。結果は www.siteprof.com/profile/23/jake-web-developer のようになります。プロファイルリンクを作成するときにこれを実行できることはわかっています。しかし、誰かがwww.siteprof.com/profile/23このリンクを使用してこのプロファイルにアクセスした場合、その前のテキストをURLに追加できますか?

また、コントローラのアクションからこれらの特定の文字列をURLに追加する方法はありますか?

1

2 答え

それはCakePHPのコンベンションでは正しいようには見えませんが、以下のようになります:

**www.siteprof.com/profiles/view/23**

その後、 view($ id = 0、$ name = "")というアクションを持つようにprofiles_controllerを設定します。 私はそれがなぜ重要なのかわかりませんが、nameパラメータを使ってリンクを生成することはできますが、それでも動作します:

www.siteprof.com/profiles/view/23/jake-web-developer

最後の文字列を追加することが重要な場合は、View Controllerでリダイレクトを行う必要があります。 $ nameが指定されているかどうかを確認し、そうでない場合は、名前の付いたURLにリダイレクトします。

0
追加された
しかし、あなたが持つことができないものは:www.siteprof.com/profile/23/jake-web-developerです。 (アクションが "23"と呼ばれていない限り、URLに "action"がありません)
追加された 著者 Nick Zinger,
ああ、それは大丈夫です。
追加された 著者 Nick Zinger,
それがあなたが考えるものなら「リアルタイム」ではありません。 Stackoverflowはまた、ページをリフレッシュして、あなたはそれを見ていないだけです(私はOperaでそれを見ます)。リダイレクトを高速にするには、リダイレクトがコントローラアクションの開始時に配置されていることを確認する必要があります。
追加された 著者 Nick Zinger,
確かにwww.siteprof.com/profiles/view/23/jake-web-developerとview($ id)のメソッドシグネチャを持つことができます。ケーキは有益には 'jake-web-developer'の部分を無視します
追加された 著者 RichardAtHome,
私のroute.phpでは、これをprofile/view/23にリダイレクトしています
追加された 著者 benji,
このリダイレクトには多くの時間がかかります。フロー上のスタックのURLを確認してください stackoverflow.com/questions/7926007/… ID 7926007を別のものに変更すると、関連するテキストが自動的に変更されます。
追加された 著者 benji,

私のソリューションは、URLに完全なURLにリダイレクトするSEOのフレンドリーなタイトルが含まれていない場合、ページにカスタムリダイレクトヘッダーを入れることです

1つの方法は次のとおりです。

public function view($id = null, $slug = null) {

  $data = $this->Profile->findById($id);

  if ($slug == null) {

    $this->redirect(array('action'=>$view, $id, $data['Profile']['slug']));

  }

 //.. rest of view logic

}

お役に立てれば :-)

0
追加された