こんにちは!独学プログラマー&ライターのつぶらやです。
普段皆さんがwebページを表示するために、ブラウサの枠に入れるhttps://www・・・という文字列がurl(ユーアールエル)という事はご存知の方が多いと思います。
また、ホームページを作成されたことのある方ならホームページにリンクを張る方法も、phpを学んでいた方なら自分の作成しているページのurlが何なのかもわかると思います。
でもcakephpのurlの設定は同じ方法ではできません。
cakephp初心者のみなさま、以下のような事でお困りではありませんか?
★自由なurlを作成したいが方法がわからない
★静的ページを置きたいのに場所がわからない
★ページ間のデータの受け渡しがわからない
上記のお悩みを一度に解決出来るように、方法をまとめました。
実際に動かして覚えて頂くために、確認手順という項目で例を記載しています。
それでは早速はじめていきましょう。
好きなurlを作りたい
cakephpのurlは何も設定しなかった場合、【コントローラ名/アクション名】となります。
実際、確認してみましょう。
コントローラ名/アクション名のurlの表示方法
例えば、掲示板に書き込むという機能を想定してthreadコントローラを作成して、その中にwriteアクションを作成して確認してみます。
1. threadコントローラの中に、writeアクションを記述する
2. https://wwww.com/thread/write にアクセスすると、
threadコントローラのwriteアクションの内容が実行されている
自由なurlを設定する方法
コントローラ名/アクション名以外の好きなurlを設定したい場合もきっと出てくると思います。
例えば、
https://wwww.com/special/news/august/12
など、本当に自由に設定することが可能です。
そんな場合は、app/Configの下にあるroutes.phpを使います。
1. routes.phpに以下を書いて保存
Router::connect('/threadurl/dispurl', array('controller' => 'thread', 'action' =>'disp'));
2. https://wwww.com/threadurl/dispurl にアクセスすると、
threadコントローラのdispアクションの内容が実行されている
作成するページの内容や目的によってユーザーにわかりやすいurlを設定するのがよいと思います。
静的ページはどこに置けば表示される?
cakephpで作成されるページは動的ページと呼ばれるものです。
動的ページとは、言葉の通り様々な条件によって表示する内容を変化させられるページです。
コントローラ内のアクションでで変化させる内容や計算をして、ビューと呼ばれるページ表示のためのファイルに渡します。
そのようにcakephpで作成された動的ページのurlは前項で覚えてい頂いた通りですが、逆の静的ページ(htmlファイル)はcakephpを使った場合表示できないのでしょうか?
そんな事はありません。
/app/webroot/階層に作成したhtmlファイルを置きましょう。
その場合のurlがどうなるのか見ていきましょう。
cakephpで静的ファイルを表示する方法
https://wwww.com/news.html というurlでページを表示したい場合。
1. /app/webroot/配下にnews.htmlをおく
cakephpでwebrootのフォルダ配下の静的ファイルを表示する方法
https://wwww.com/august/news.html というurlでページを表示したい場合
1. /app/webroot/配下にaugustフォルダを作成
2. 作成したフォルダ内にnews.htmlをおく
cakephpだからといって、静的ページが表示できないわけではないですので
ぜひ覚えておいてください。
コントローラからビューにurlを渡す方法
続いてコントローラ側からビューにurlを渡してみます。
コントローラで取得したurlをビューに渡す方法
◆コントローラ側
$edit_url = "https://wwww.com/thread/edit"; // $edit_url という変数にビューに渡すurlを設定 $this->set('edit', $edit_url); // $edit_urlの中身をビュー側で$editという変数で使用できるようにする
◆ビュー側
<?php echo $edit ?>
◆ブラウザの画面表示
https://wwww.com/thread/edit
ブラウザで思った通りの表示ができるのは嬉しいものです。
簡単な事かもしれませんが、
きっとこういう簡単な成功の積み重ねが結果につながると思います。
urlで渡したパラメータを取得したい
最後に、最も皆さんが悩みそうな部分について書きたいと思います。
皆さんがと書きましたが、私が昔悩んだところです(笑)
urlのパラメーターをコントローラ側で受け取る方法
まずは、urlに以下のようにパラメータをつけた場合です。
urlに「1」と「hotnews」という値が「id」と「hotnews」という名前で渡されています。
◆コントローラ側の記述
$this->requestで受け取れます。種類は2種類あります。
◇メソッド(※cakephpのバージョン2.3より新しい場合に使えます。)
$id = $this->request->query("id"); $title = $this->request->query("title");
◇プロパティ
nullの場合エラーになるのでissetでチェックしましょう。
isset は中身が設定されているか確認するphpの関数です。
if(isset($this->request->query["id"])){ $id = $this->request->query["id"]; } if(isset($this->request->query["title"])){ $title = $this->request->query["title"]; }
◆結果
メソッドでもプロパティでも以下の値が受け取れます。
$id → 1 $title →hotnews
次はurlのパラメータではなく、ビュー側のinputタグで設定した値を渡したい場合です。
inputタグで渡した値をコントローラ側で受けとる方法
inputタグに5という値を渡して、コントローラ側で受け取ってみます。
◆ビュー側の記述
<input type= "text" name= "data[News][id]" value= "5" />
◆コントローラ側での受け取り方
$this->requestで受け取れます。種類は2種類。
◇メソッド
$Newsid = $this->request->data('News.id');
◇プロパティ
nullの場合エラーになるのでissetでチェックしましょう。
isset は中身が設定されているか確認するphpの関数です。
if(isset($this->request->data["News"]["id"])){ $Newsid = $this->request->data["News"]["id"]; }
◆結果
$Newsid → 5
一度理解すると簡単かと思われるかもしれませんが、慣れるまではいつでも目につくところにメモをしておくといいと思います。
まとめ
今回は、cakephpの様々なurlの設定や考え方についてお話してみました。
戸惑っている方は、まず簡単な内容で試してください。
やってみると、スッと自分の中に知識が落ちてくる瞬間がでてきます。
そして何より、思った通りのurlでページに内容が表示されるのは思った以上に楽しかったりしますよ。
それでは、また。