*

[CakePHP]SNSを作ろう ブログ編4~閲覧画面作成~

公開日: : CakePHP, php, SNS

SNSを作ろうまとめページはこちら→SNSを作ろうまとめページ

[CakePHP]SNSを作ろう ブログ編3~投稿画面作成~の続き。
ブログ編は基本的にCakePHPのチュートリアルを進めています。
ぶっちゃけそっちのチュートリアル見たほうがいいです。
ここは自分の知識を植え込むために書いてるのがメインです。
あと疑問に思ったところを調べて追記などなど。

投稿の次は編集

さて、投稿できるようになったら、今度は閲覧して、間違いを見つけて編集したいです。
間違えなきゃ一番いいんですけどね。

私はよく投稿してから3~4回ぐらい間違いを編集します

だから編集機能は必須だと思います。

編集のために必要な機能

さて、編集するのに必要な機能はなんでしょうか。

編集機能?

いいえ、違います。

まず、閲覧できないと!!
Wannabenote
閲覧しようとタイトルをクリックすると怒られるの図

Viewがないから怒られています。
閲覧できないんじゃ編集どころの話じゃありません。

閲覧画面を作る

閲覧画面を作るのは、まずコントローラに閲覧用のメソッドが必要ですね。
ていうか怒られているのも、viewってメソッドがねぇぞコラ、って怒られているので、viewメソッドを作りましょう。

<?php
class PostsController extends AppController{
    public $helpers = array('Html','Form', 'Session');

    public function index(){
        $this->set('posts', $this->Post->find('all'));
    }

    public function add(){
        if($this->request->is('post')){
            $this->Post->create();
            if($this->Post->save($this->request->data)){
                $this->Session->setFlash(__('投稿されました。'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('投稿されませんでした。'));
        }
    }

    public function view($id = null){
        if($id) {
            $post = $this->Post->findById($id);
        }
        if(!$id || !$post){
            throw new NotFoundException(__('投稿が見つかりません。'));
        }
        $this->set('post', $post);
    }
}

viewメソッドを追加してみました。
次にview()のViewであるview.ctpを作成。

<h1><?php echo h($post['Post']['title']); ?></h1>
<p><?php echo __('投稿日時') . ':' . h($post['Post']['created']); ?></p>
<p><?php echo h($post['Post']['body']); ?></p>
1
<h3>引数</h3>
1
public function view($id = null){

viewが呼ばれたときの引数があります。
この引数はどこで得ることができるかというと、
http://hogehoge.com/hoge/posts/view/1
この末尾です。
Posts->view()が呼ばれるindex.ctpでは、

<td>
       <?php echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?>
</td>

このように$post['Post']['id']を埋め込んでいるので、viewを呼ぶときに必ずidが呼ばれる前提です。

またデフォルト値を設定することによって、後のエラーチェックが出来るようにしています。
デフォルト値を設定せずに

public function view($id){

こうすると、
Wannabenote
このようにMissing argumentUndefined variableと散々なことを言われて、idを定義していないことになります。
このエラーを回避するためにデフォルトをnullにして、値がないURLをリクエストされてもエラーチェックまでプログラムが進むようにしているのですね。

IDでデータ検索

$post = $this->Post->findById($id);

findById($id)というメソッドでデータを検索し、$postという変数に代入しています。
代入されたデータは配列で取り出せます。
idは引数で渡されてくるので、データを得ることが出来ます。

エラーチェック

if($id) {
    $post = $this->Post->findById($id);
}
if(!$id || !$post){
    throw new NotFoundException(__('投稿が見つかりません。'));
}

最初のifでidが入れられているかを比較しています。
phpの比較は0かそれ以外か、という形式ですので、数字が入っていた場合はこちらでデータ検索を行っています。
もしidにデータが入っていない場合はnullとなり、null=0で扱われ、ifの条件を満たさずに次の行へ進みます。
またidで検索した結果、見つからなかった場合$postにもnullが代入されます。

二回目のifは$idか$postのどちらかnullだったらエラーを投げるということになります。
例外を投げるとcakephpが拾って自動的にエラー処理を行ってくれるようです。べんりー。

試してみる

試しに、http://hogehoge.com/hoge/posts/view/1 に接続してみましょう。

Wannabenote
表示されています。

今度はないはずのIDであるhttp://hogehoge.com/hoge/posts/view/0 に接続してみましょう。
Wannabenote
投稿が見つかりません。
エラーチェックが正常に働いていますね。

次回は編集画面です。

ad

関連記事

Wannabenote

[PHPStorm]DB接続設定 SQLをPHPStormから投げれるようにする

事の発端 今日、仕事してて、SQLを組んでたんです。 データ的には大して面倒ではない5テーブルの

記事を読む

Wannabenote

[PHPStorm]SNSを作ろう IDE環境作成編

SNSを作ろうまとめページはこちら。 前回の続き、というか閑話休題。 プログラムをガチで

記事を読む

Wannabenote

[SNS,PHP]SNSを作ろう OpenPNEインストール編

ふと今日、ほしいなーって思ったSNSがないんです。 どこ探してもない。 ……ないなら作っちゃ

記事を読む

logo

WordPressがログイン出来ない時

WordPressでこのホームページを始めたのですが、試行錯誤のうちにログインが出来なくなりました。

記事を読む

Wannabenote

[CakePHP]bakeコマンドでViewを作る

CakePHP関連まとめページはこちら。 最後はViewを焼いてみます。 Viewを焼き上げ

記事を読む

Wannabenote

[CakePHP]SNSを作ろう CakePHPインストール編

SNSを作ろうまとめページはこちら はい。こないだのsymfonyはなかったことにします。

記事を読む

Wannabenote

[CakePHP]SNSを作ろう ブログ編2~MVCの作成~

SNSを作ろうまとめページはこちら。 前回の続き。 ブログ編は基本的にこちらのチュートリ

記事を読む

Wannabenote

[CakePHP]SNSを作ろう ブログ編

SNSを作ろうまとめページはこちら。 前回の続き。 さて、私が今作りたいのはブログがメイ

記事を読む

cakephp

[CakePHP, jQuery]Ajaxでメッセージをゆっくり消す

SNS作りをさぼってるわけじゃないんですよ。 作るだけなら簡単だけど、ブログにまとめる時間がないだ

記事を読む

Wannabenote

[CakePHP]SNSを作ろう ブログ編5~編集画面作成~

SNSを作ろうまとめページはこちら CakePHPで閲覧画面を作った続きです。 投稿を手軽に

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑