2014年03月22日

[CakePHP2.x] フォームから保存時にデータを追加する方法

フォームからデータ入力してもらって、合わせて値を追加して保存したい(例えば入力してもらった値の平均値とか)という時に、どうやれば良いのかわからなかったので調べた。
つまり、連想配列への追加をどうやるかっていう話なんだけど。

<?php
public function add() {
        if ($this->request->is('post')) {
            $this->Post->create();
            if ($this->Post->save($this->request->data)) {
                $this->Session->setFlash(__('Your post has been saved.'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('Unable to add your post.'));
        }
    }
?>

上記がチュートリアルのBlogのコード。
実際にフォームで入力したデータが、連想配列で以下に入ってくる。

$this->request->data

その時、Postテーブルのhogehogeという行にも、ユーザーが入力していないけど値を追加したいという時は、 saveの前に以下のように連想配列に追加すれば出来る。
以下は、hogehogeにvalという値を追加して保存している。

$this->request->data['Post']['hogehoge'] = 'val';
$this->Post->save($this->request->data)
posted by lute at 13:59| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2014年03月21日

[CakePHP2.x] find(‘all’)で条件を指定して抽出する方法

Blogチュートリアルだと、find('all')で、postsテーブルにあるデータを全部引っ張ってきている。

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

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

しかし、条件で絞り込んで検索したいときはある。
というので、id=1のブログ記事のみ抽出し、降順で検索結果を返すやり方。

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

    public function index() {
        $conditions = array(
            'conditions' => array(
                'Post.id' => 1
                ),
            'order' => array(
                'Post.title' => 'desc',
                )
        );
        $this->set('posts',$this->Post->find(‘all‘,$conditions));
    }
}
?>

上記は1つしか引っかからないので、全然実用的ではないが、conditionsをfind()の引数で指定できる。「order」で、'asc'を指定すれば昇順になる。

and条件で複数指定したい場合は、以下のように複数記載すれば良い。

$conditions = array(
        'conditions' => array(
            'Post.id' => 1,
            'Post.Title' => 'test'
        ),
    );

参考

データを取得する[CakePHP]

タグ:PHP cakephp 検索
posted by lute at 21:29| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

[CakePHP2.x] チュートリアルのBlogを作ってみる

と言っても、CakePHPサイトのブログチュートリアルをそのまま辿れば特に問題なく出来た。
これだと、流石に書くこと無さすぎるので、写経そのままして、よく分からなかったり、ハマったりした所を書いておく。

命名規約

CakePHPは、名前でそれぞれがマッピングされるようにできている。
公式サイトの規約にも説明があるのだが、表でまとめると以下の感じ。

名前とファイル名の関係

Database
(table名)

Model

Controller

View

名前 posts Post PostsController

-

ファイル名

-

Post.php PostsController.php /Model/Posts/の下に置いたファイル

上記のような関係になっている。大文字/小文字や、Modelだけ複数形が単数形になるのが分かりにくい気がするんだが、英語圏の人は普通なのかね。

単語が2つ繋がってたり、複数のテーブルを結合するのは、また別の機会に。

CakePHPはPHPだ

おまえは何言ってるんだという感じだが、最初分からなかったので。
Model.phpを作成すると思うんだけど、チュートリアルに以下のように記載されているんだよね。

class Post extends AppModel {
}

んで、そのまま書くと画面に「class Post extends AppModel」とか表示されてるし、何だこれ?と思ってた。
PHPの構文で囲んでいなかったからだー、と気づいたのは後になってから。

<?php
class Post extends AppModel {
}
?>
タグ:PHP cakephp
posted by lute at 15:59| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2014年03月16日

CakePHP 2.4.6のインストール

Webアプリを作ってみたくて、Cake PHPを弄ってみる。
普段は、C++、C#やpython、VBScript(VBA含む)なWindows且つスタンドアロンなプログラムしか書いていないので、知らない事がとても多い。
なので、調べた/やったことをBlogに残しておこうと思う。

環境は、以下の環境で開発を行う。

  • CentOS 6.5
  • Apache 2.2.15
  • MySQL 5.5.36
  • PHP 5.5.10
  • PHPMyAdmin 4.1.9

一先ず、最初はインストールを行ってみる。
基本は、本家のインストールマニュアル見ながらやれば、誰でも出来るだろうけど。

インストール手順

  1. http://cakephp.jp/から、安定版をダウンロードしてくる。
  2. ダウンロードした、cakephpを置いてunzipで解凍する。
  3. apacheで見れるところに移動させて、ディレクトリ名をcakephpに変更する。
  4. cakephpの中のapp/tmpをchown apache:apacheで所有権を持たせる。
  5. http://<your domain>/cakephp/にアクセスする。

databaseとSecurityの設定がエラーになるだろうけど、それ以外はグリーン(OK)になっていれば、全体のインストールは終了。

次回は、チュートリアルに従ってアプリケーションを作成する。

posted by lute at 08:55| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。