asklife

IT&Life

Category: Mac

MacのMAMPでCakePHP入門

MacのMAMPでCakePHPのチュートリアルを実装

MAMPのDocument Rootは
/Applications/MAMP/htdocs
です。

CakePHPチュートリアルをやっていきます。
http://book.cakephp.org/2.0/ja……d.html#id2

以下は自分用のメモ

まずはCakePHPをgit cloneします。

cd /Applications/MAMP/htdocs
git clone git://github.com/cakephp/cakephp.git

次にDB・テーブル作成

/* まず、postsテーブルを作成します: */
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

/* それから、テスト用に記事をいくつか入れておきます: */
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());

database.phpをリネームコピーし、中身を書き換える。

cp -p app/Config/database.php.default app/Config/database.php

DB設定をあわせます。

public $default = array(
         'datasource' => 'Database/Mysql',
         'persistent' => false,
         'host' => 'localhost',
         'login' => 'user',
         'password' => 'password',
         'database' => 'cakephp',
         'prefix' => '',
         //'encoding' => 'utf8',
);

セキュリティ用のSaltを書き換え、ハッシュ生成用にランダムな値をセット

vi app/Config/core.php
Configure::write('Security.salt', 'hogehogehogehoge');
Configure::write('Security.cipherSeed', 'hogehogehogehoge');

最後にapp/tmpの権限を変更

chmod -R 755 app/tmp

DebugKitをインストール
https://github.com/cakephp/debug_kit

上記からZipをダウンロードし、解凍しapp/Plugin/DebugKitとして展開します。

app/Config/bootstrap.php

CakePlugin::load('DebugKit');

app/Controller/AppController.php

class AppController extends Controller {
	public $components = array('DebugKit.Toolbar');
}

app/Config/core.php

Configure::write('debug',2);

さて、ここまででCakePHPの準備完了

ブログチュートリアル開始

Postモデル作成

touch app/Model/Post.php
vi app/Model/Post.php

<?php
class Post extends AppModel {
    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty'
        ),
        'body' => array(
            'rule' => 'notEmpty'
        )
    );
}

ここでPostクラスとするのはPostテーブルを作ったからです。

Postコントローラ作成

touch app/Controller/PostsController.php
vi app/Controller/PostsController.php

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

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

    public function view($id) {
        if (!$id) {
            throw new NotFoundException(__('Invalid post'));
        }

        $post = $this->Post->findById($id);
        if (!$post) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('post', $post);
    }

    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.'));
        }
    }
    public function edit($id = null) {
    	if (!$id) {
        	throw new NotFoundException(__('Invalid post'));
    	}

    	$post = $this->Post->findById($id);
    	if (!$post) {
    	    throw new NotFoundException(__('Invalid post'));
    	}

    	if ($this->request->is(array('post', 'put'))) {
        	$this->Post->id = $id;
        	if ($this->Post->save($this->request->data)) {
        	    $this->Session->setFlash(__('Your post has been updated.'));
        	    return $this->redirect(array('action' => 'index'));
        	}
        	$this->Session->setFlash(__('Unable to update your post.'));
    	}

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

public function delete($id) {
    if ($this->request->is('get')) {
        throw new MethodNotAllowedException();
    }

    if ($this->Post->delete($id)) {
        $this->Session->setFlash(__('The post with id: %s has been deleted.', h($id)));
        return $this->redirect(array('action' => 'index'));
    }
}


}

ここでindex()メソッドは
example.com/posts/index
というHTTPリクエストで呼ぶことになる。

set()はControllerからViewへデータを渡す。

Postビュー作成

mkdir app/View/Posts
touch app/View/Posts/index.ctp
vi app/View/Posts/index.ctp

<!-- File: /app/View/Posts/index.ctp -->

<h1>Blog posts</h1>
<p><?php echo $this->Html->link('Add Post', array('action' => 'add')); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Actions</th>
        <th>Created</th>
    </tr>

<!-- ここで$posts配列をループして、投稿情報を表示 -->

    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td>
            <?php echo $this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id']));?>
        </td>
        <td>
            <?php echo $this->Form->postLink(
                'Delete',
                array('action' => 'delete', $post['Post']['id']),
                array('confirm' => 'Are you sure?'));
            ?>
            <?php echo $this->Html->link('Edit', array('action' => 'edit', $post['Post']['id'])); ?>
        </td>
        <td>
            <?php echo $post['Post']['created']; ?>
        </td>
    </tr>
    <?php endforeach; ?>

</table>

viewビューを作成
※わかりにくい。。。笑


touch app/View/Posts/view.ctp
vi app/View/Posts/view.ctp

<!-- File: /app/View/Posts/view.ctp -->

<h1><?php echo h($post['Post']['title']); ?></h1>

<p><small>Created: <?php echo $post['Post']['created']; ?></small></p>

<p><?php echo h($post['Post']['body']); ?></p>

addビューを作成

touch app/View/Posts/add.ctp
vi app/View/Posts/add.ctp

<!-- File: /app/View/Posts/add.ctp -->

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

editビューを作成

touch app/View/Posts/edit.ctp
vi app/View/Posts/edit.ctp

<!-- File: /app/View/Posts/edit.ctp -->

<h1>Edit Post</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('title');
echo $this->Form->input('body', array('rows' => '3'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->end('Save Post');
?>

ルーティングを変える
※これはやらなくてもOK

vi /app/Config/routes.php

// Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/', array('controller' => 'posts', 'action' => 'index'));

http://localhost:8888/
http://localhost:8888/cakephp/posts/index

を確認してみる。

WEBサーバにあげて動かしてみると権限とかいろいろ詰まった。

Warning (512): CakePHPのフォルダ/app/tmp/cache/ is not writable [CORE/Cake/Cache/Engine/FileEngine.php, line 320]

chmod -R o+w app/tmp/cache/

つぎはCSSが反映されていない問題を解決

sudo vim /etc/apache2/apache2.conf

<Directory "CakePHPのパス(環境に合わせて変えましょう)">
    AllowOverride all
</Directory>

sudo service apache2 restart

次はこれを実装してみよう。
#CakePHP 爆速でAPIを実装するチュートリアル
http://slywalker.hateblo.jp/en……/15/115907

git clone https://github.com/slywalker/cakephp-app-api_sample

Macを買ったら入れたいソフト25個

▼コミュニケーション系

Skype

http://zapp2.staticworld.net/reviews/graphics/products/uploaded/skype_skype_50_for_mac_714808_g3.jpg

オンラインで無料のインターネット通話が出来るアプリです。

http://a3.mzstatic.com/us/r1000/082/Purple/e1/57/a9/mzi.hyufkjtx.175x175-75.png

操作性も簡単で誰でも簡単に使うことができるTwitterクライアント

http://www.techcrunch.com/wp-content/thunderbird.png

縦3ペイン表示がイイネ。

▼ブラウザ

http://tc4.search.naver.jp/?/kaze/mission/USER/9/9/94839/4/cd25b09fe067a549953aa39965170c89.jpg/r.120x120

ブラウザはお好みで

▼クラウドサービス

http://www.dropbox.com/static/images/watch_a_video2.png

Mac、Windows、Linux間でのファイルの同期が簡単にできる、オンラインストレージアプリケーション。

http://tc3.search.naver.jp/?/kaze/mission/USER/9/9/94839/11/065357bab41d6c11ab45cf202292f57e.jpg/r.120x120

iPhoneからでもMacからでも、いつでもメモ

▼パフォーマンス

Google 日本語入力はシンプルで高速な Windows と Mac OS X 用の日本語入力ソフトウェアです。

インターネットに最適化された、豊富な語彙数と入力サジェストによる快適な日本語入力を提供します。

http://getnews.jp/img/archives/nihongor.jpg

Google版の日本語入力ソフトウェア

AppCleaner

http://tc2.search.naver.jp/?/kaze/mission/USER/1/9/13049/19/080dee0a1fbadaec042370579e4f5b6d.jpg/r.120x120

MACでアプリをアンインストールしたいときに

AppTrap

http://www.lifehacker.jp/090624_LHP_08.jpg

Mac OS Xの中でも一番簡単にアプリが削除できるアプリ。

アプリをゴミ箱に入れると、そのアプリに関連する不要なファイルも一緒に削除。

http://images.thoughtsmedia.com/resizer/thumbs/size/600/at/auto/1289831558.usr105634.jpg

Mail.appを3カラム表示にしてくれるプラグイン。

Growl

http://growl.info/images/growlicons/Growl_256x256.png

対応しているアプリケーションのデスクトップに、ダウンロードの通知や新着メールをポップアップして通知をしてくれるアプリケーション。

http://www.nickshertzer.com/wordpress/wp-content/uploads/2011/07/lippupallo.png

不要な言語環境を削除して、HDDの空き容量を増やすことができるアプリケーション。

http://www.ralspeed.com/images/stuffIt_expander.png

25種類以上のファイル形式や、パスワード付きの圧縮ファイルも解凍できる。

TrashMe

http://macmagazine.com.br/wp-content/uploads/2010/05/28-trashme.png?cda6c1

不要になったアプリケーションを削除してくれます。

http://2.bp.blogspot.com/_C1H3NFV3-kI/TSq9iYCzbyI/AAAAAAAAAFU/aEnoHN2XmgI/s1600/5h5Rx.jpg

複数のドキュメントが同時に開けるタブ型のインターフェイス。辞書機能も搭載、文章もハイライトできます。

http://www.szcreate.jp/wp/wp-content/uploads/2011/04/SkitchMac.png

スクリーンキャプチャ&編集ソフト。ブログを書いたりしている人にオススメです。

http://www.szcreate.jp/wp/wp-content/uploads/2011/04/500.png

マウスやトラックパッドの機能アップツール。

▼マルチメディア

http://images1.videolan.org/images/largeVLC.png

多くの形式の動画を再生することができるアプリケーションです。

http://cultofmac.cultofmaccom.netdna-cdn.com/wp-content/uploads/2010/06/20100602-flip4mac.jpg

QuicktimeでWMVを再生することができるようになるアプリです。

http://niche-macworld-production.s3.amazonaws.com/wp-content/uploads/2011/02/144662-handbrake-64bit-thumb_original.jpg

オープンソースのDVDや動画ファイルをiPhoneやiPad対応動画に変換できるツールです。

http://phone.digitalsradar.com/uploadfiles/phonedigitalsradarcom-1308483796/50-mac-essentials-4-perian_1.png

Quicktimeで様々な種類の動画を再生できるようにしてくれるアプリです。

http://tc1.search.naver.jp/?/kaze/mission/USER/9/9/94839/31/cc35d4b8e796c869289176c383aa3da3.jpg/r.120x120

画像ビューア 。 漫画閲覧などにも。

▼プログラマ向け

http://tc4.search.naver.jp/?/kaze/mission/USER/9/9/94839/13/504bd7482a2907b87ca15927cd636ea7.jpg/r.120x120

FTPクライアント

http://tc4.search.naver.jp/?/kaze/mission/USER/9/9/94839/17/050f92f395f77ae89e96b3de2c31334a.jpg/r.120x120

定番テキストエディタ

 

MacでPHPのローカル開発環境

Mampを導入しました。

http://www.mamp.info/en/index.html

Xamppにしようかと思いましたがMacだとMampがいいそうなのでこちらに。

参考記事
http://www.techgaga.com/mac-lo……tual-host/
http://pluto-blog.blog.so-net…….2007-09-09

© 2017 asklife

Theme by Anders NorenUp ↑