*

[CakePHP]SNSを作ろう ブログ編3~投稿画面作成~

公開日: : 最終更新日:2014/12/18 CakePHP, php, SNS

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

前回([CakePHP]SNSを作ろう ブログ編2~MVCの作成~)の続きです。

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

完成!?

前回のおかげでDBに直接SQLを投げれば公開できるブログが完成しました。
すばらしいですね。これで完成ならいいんですが、ものすごい使い勝手が悪いだけなので、今回は投稿できるようにします。

投稿画面

Viewの用意

まずは投稿画面の用意。
addというメソッドで呼び出す予定なので、add.ctpという名前のViewを用意します。

<h1>投稿画面</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->end('投稿');

シンプルに見出しとフォームですね。
HTMLヘルパーを利用して記述すると面倒なHTMLでフォームを記述する必要がなく、シンプルに記述できます。

inputメソッドへのプロパティの渡し方

echo $this->Form->input('body', array('rows' => '3'));

ここのarray(‘rows’ => ’3′)という部分で、rowsというキーに対して3を設定し、bodyの行数を指定していますね。
もちろん最大の行数ではなく、表示の行数です。
イメージはこんな感じです。
Wannabenote

コントローラへ実装

そして今度はコントローラから呼べるようにPostControlleradd()というメソッドを追加していきます。
URLは http://hogehoge.com/hoge/posts/add になりますね。

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(__('投稿されませんでした。'));
        }
    }
}

リクエストの種類の確認

if($this->request->is('post')){

ここで、PostsControllerのaddが呼ばれたときに、それがformのpostで呼ばれているかを確認しています。
投稿からでなければ、何もしない、という感じですね。

データの保存

if($this->Post->save($this->request->data)){

saveメソッドです。要するにPostというテーブルにinsert or updateです。
idが新しいものであればinsert。既に登録されているのであればupdateがかかります。
また主キー(この場合id)が設定されていない場合は自動的にinsertです。
Viewでinput(‘title’),input(‘body’)を以外に何も入力がないので、idはデータがない状態でコントローラに渡ります。
よって、このViewを利用する限りは必ずinsertになります。
また、createdやmodifiedというカラムがテーブルに存在すると、自動的にその時刻を保存してくれます。べんりー。

次の画面にメッセージを表示

$this->Session->setFlash(__('投稿されました。'));
return $this->redirect(array('action' => 'index'));

setFlashをすると、引数で渡したメッセージを次のリダイレクト先で、上部に表示してくれます。
そしてredirectをしている先はindex。
つまり、ここら辺に「投稿されました」って表示されるはずです。
Wannabenote

ちなみになんだよこの「__」は、と思うかもしれませんが、こちらは国際化用のものらしいです。
日本語はこれだけど、言語設定が英語ならこの言葉ね、って感じで切りかえれるとかなんとか。そのうちやろう。

試してみる

そんなこんなで以上のデータをアップロードしたら、http://hogehoge.com/hoge/Posts/add に接続します。
Wannabenote
こんな感じで表示されたでしょうか。

表示されたら、適当に文字を打って投稿します。
Wannabenote

Wannabenote
投稿できました。

もう、投稿も出来るようになったし、完璧なブログシステムですね。
Post/indexのリンククリックするとエラー出るけど

次回更新しました→[CakePHP]SNSを作ろう ブログ編4~閲覧画面作成~

ad

関連記事

Wannabenote

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

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

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

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

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

記事を読む

cakephp

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

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

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

[CakePHP]ログアウトすると権限が必要と表示される

ちょっと時間は前後しますが、ログイン機能を作ったあとの話です。 チュートリアル通りに進めても、

記事を読む

logo

WordPressがログイン出来ない時

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

記事を読む

Wannabenote

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

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

記事を読む

Wannabenote

[CakePHP]SNSを作ろう CakePHP設定編

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 ↑