*

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

公開日: : CakePHP, php, SNS, 雑記

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

CakePHPで閲覧画面を作った続きです。

投稿を手軽にしたい

投稿ボタン

現在はhttp://hogehoge.com/hoge/Posts/add とURLを直打ちすると投稿画面に行くことができますが、もう少し手軽にしたいです。
そこでpostのindex.ctpにボタンを設置します。

<h1>Blog Posts</h1>

/* 中略 */

<p><?php
echo $this->Html->link(
    '投稿する',
    array('controller' => 'posts', 'action' => 'add')
);
?></p>

特に解説はいらなそうです。
indexにアクセスするとリンクが増えています。
Wannabenote
クリックすると投稿画面に進みます。

投稿、閲覧、その次は

編集機能

もちろん完成なわけがなくて。

編集画面が作りたかったんですよね。前回。
そのために閲覧画面を作ってたんでした。
というわけで実装していきましょう。

実際の動きを考えます。

  • 閲覧画面で編集ボタンを押す
  • 編集画面で編集して、保存ボタンを押す
  • 保存したメッセージを出し、閲覧画面に戻る

こんな感じでしょうか。
これをCakePHPで考えます。

  • view.ctpに編集(edit)ボタンが必要
  • Controllerにeditのメソッドが必要
  • メッセージをsetFlash、リンク先はidを指定したview.ctp

動きは想像が付きました。

編集機能を作る

コントローラ

なにはともあれコントローラです。
基本の流れは コントローラを作る -> ビューを作る or モデルを作る みたいです。
(個人的にはやりたい動きの順序で作るほうがわかりやすいけど)

<?php
class PostsController extends AppController{
/* 省略 */
    public function view($id = null){
        $post = $this->getPost($id);
        $this->set('id', $id);
        $this->set('post', $post);

    }

    public function edit($id = null){
        $post = $this->getPost($id);
        if($this->request->is(array('post', 'put'))){
            if($this->Post->save($this->request->data)){
                $this->Session->setFlash(__('更新されました'));
                return $this->redirect(array('action' => 'view', $id));
            }
        }

        if(!$this->request->data){
            $this->request->data = $post;
        }
    }

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

共通部分をメソッドに

public function view($id = null){
    $post = $this->getPost($id);
    $this->set('id', $id);
    $this->set('post', $post);
}

viewの内容を少し変更しました。
データを取ってくるところは編集と一緒なので、ひとまとめにして↓のgetPostに。

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

編集画面を呼び出す。

    public function edit($id = null){
        $post = $this->getPost($id);
        if($this->request->is(array('post', 'put'))){
            if($this->Post->save($this->request->data)){
                $this->Session->setFlash(__('更新されました'));
                return $this->redirect(array('action' => 'view', $id));
            }
        }

        if(!$this->request->data){
            $this->request->data = $post;
        }
    }

前半のifで、もしpostまたはputでリクエストされたら更新を行う、さもなければ普通に表示です。

ビュー

<h1>編集</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('保存する')
?>

隠し属性

echo $this->Form->input('id', array('type' => 'hidden'));

idは入力はさせないですが、更新のために取っておくため、hiddenにしておきます。

インデックスに接続して、適当に選択。
Wannabenote

閲覧画面がちゃんと表示されて、編集ボタンがあります。
編集ボタンをクリック。
Wannabenote

データがちゃんとフォームに挿入されて、編集画面が表示されるので、
変更して保存ボタンをクリック。
Wannabenote

ちゃんとメッセージが表示され、データの更新がかかりました。
Wannabenote

基本の投稿、閲覧、編集は完成しましたね。
次はログイン機能でも実装してみますか。

また次回。

ad

関連記事

Wannabenote

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

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

記事を読む

logo

[CakePHP]bakeコマンドでControllerを対話形式で焼き上げる

基本の三種は焼きあがったのだけど 焼きあがったんですが、Controllerのソースがscaffo

記事を読む

Wannabenote

[CakePHP]SyntaxHighlighterを利用する

ソースを綺麗に表示する このサイトでも利用しているのですが、ソースを表示して、かつ予約語などを別色

記事を読む

IMG_0284.JPG

[PC]wacomのペンタブCTH-480を買ってきました。

怒りに打ち震えて、散財をしてきました。 買ってきたのはこちら。 ブログを始めて、

記事を読む

Wannabenote

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

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

記事を読む

logo

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

CakePHP関連まとめページはこちら。 今度はControllerをbakeコマンドで焼き上げて

記事を読む

unity ご祝儀

[Unity?]割り切れない関係のためのご祝儀計算シミュレータ

今日、親友が結婚します。 なので、ご祝儀を用意するんですが、相場は3万円ですね。 じゃあ、な

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

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

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

記事を読む

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 ↑