2012-02-24 21 views
0

私は構築しているプロジェクトにWordpress-esque CMSシステムを構築しようとしています。私は、ユーザーがその場でページを作成し、それらがウェブサイトの特定の領域に表示されるようにしたい。URLから変数を取得し、それをコントローラに渡します。CakePHP 2.0

symfony2でコントローラがURLから特定の変数(通常は$ idなどのroute.ymlファイルで定義されている)を取得していますが、コントローラの変数を使用してそれはデータベースに関連しています。

しかし、私はCakePHP 2.0に慣れておらず、必要なものを探すのに苦労しています。私はそれが可能であることを知っているが、私はそれを達成するための最良の方法を知らない。特に、CakePHPはSymfonyとは異なるルートファイルを使用しています。

URLから変数を取得してコントローラ内で使用するにはどうすればよいですか?

答えて

1

短い回答:それは依存しています。

関数にパラメータを渡そうとしている場合は、経路をまったく混乱させる必要はありません。すべての名前のないURLパスセグメントが順番に処理され、メソッドパラメータとしてアクションに渡されます(/controller/action/1234controllerコントローラクラスのactionメソッドの最初のパラメータとして "1234"を渡します)。

名前付きパラメータを使用すると、URL文字列の任意の場所にパラメータを渡して、オプションにすることができます。フォームはちょうどキー:値であり、コントローラ内の$this->params['named']でアクセスします。

最後のオプションは、プレフィックスルーティングです。その速度を上げるための最良の場所は当然the CakePHP Cookbookですが、一般的な要点は、ルート定義では、デフォルトルートがどのように表示されるかと同じように、コロンで接頭辞を付けることでURLのパスコンポーネントに名前を付けることができる点です。:pluginおよび:action。必要に応じて任意の名前を定義することができます。オプションで正規表現のパターン要件を適用してからコントローラの$this->params['variablename']にアクセスすることもできます。

2

変数では、/foo?key=valueのようなクエリ文字列パラメータを取得することを意味しますか?コントローラーでは、the request object$this->request->query['key']までアクセスできます。

さらに統合されたものをお探しの場合は、CakePHPのデフォルトルートを使用するか、自分で作成することができます。

デフォルトルートは、/controller/action/param1/param2のようなURLで動作し、アクションにパラメータを渡します。たとえば、/posts/view/521view(521)PostsControllerに呼び出し、/posts/byMonth/2012/02byMonth("2012","02")を呼び出してマップします。

名前付きパラメータを使用することもでき、URLは/controller/action/key1:value1/key2:value2のように見えます。コントローラのアクションでは、$this->params['named']['key1']でそれらを読むでしょう。

カスタムルートでは、任意のURLを自由に作成できます。あなたは/コントローラ/アクションパターンに強制されません。 /archives/2012-02PostsController::byMonth(2012,2)にマップするか、/512-post-titlePostsController::view(512)にマップさせることができます。

通常、デフォルトルートから始め、必要に応じてカスタムルートを追加します。あなたはデフォルトルートとカスタムルートのすべてを読むことができますhttp://book.cakephp.org/2.0/en/development/routing.html

+0

これは私が欲しいものに似ています。 /の後ろにある変数を取得したいと思いますが、たとえばhttp://www.domain.com/pages/variableです。だから私はページの後に変数を取得する方法が欲しい/? – mickburkejnr

+0

これにはカスタムルートが必要です。デフォルトルートは '/ controller/action/variable'-typeのURLを扱います。 – Joni

関連する問題