2013年5月22日水曜日

AngularJSのチュートリアルをCakePHPでやってみる。その4

4日目のソースが欲しい方はこちらです。
サンプルページはこちらです。

テンプレート内でのリンクと画像

今回はテンプレート内でaタグを使ってリンクするのと、画像を設定する所が、メインです。
つまり以下の部分がキモです。

<a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="/angularjs_tutorial/{{phone.imageUrl}}"></a>
<a href="#/phones/{{phone.id}}">{{phone.name}}</a>

簡単ですね。imgタグには「src」では無く、「ng-src」で指定するようです。「src」でも普通に動いたんですけど…?

Jsonの変更

今回、JsonController.phpを修正してます。

public function api_get2($type = null){
    // リクエストをデバッグログに書き出し
    $this->ApiTool->logingRequest($this->request);
    // 引数チェック。空か、指定タイプ以外だったら404エラー
    $this->ApiTool->checkType($type,array('phones'));
    // タイプごとにphonesを作り分ける。
    if ($type == 'phones'){
     $phones = $this->__getPhones();
     // debug($phones);die;
     $this->set('phones',$phones);
    }
    // JSON用としてレスポンスを返す
    return new CakeResponse(array('body' => json_encode($phones)));
}

上のメソッドを追加してます。
JSON吐き出す部分を$this->set('_serialize', array('phones'));では無く、return new CakeResponse(array('body' => json_encode($phones))); としてます。こちらでも同じようにJsonを吐き出しますが以前のと違いは、Jsonの一番外側に「CakeResponse」で指定した場合、例えば「’phones’」が付きません。
こっちの方が都合が良いので今後はこっちを使用していくつもりです。
以下比較
serializeで作ったJSON
CakeResponseで作ったJSON

ではでは。

環境とか

項目 内容
PHPフレームワーク Cakephp 2.2.5
CSSフレームワーク Twitter bootstrap 2.2.2
JSフレームワーク AngularJS 1.0.5
IDE SublimeText 2
開発環境? MAMP
PC iMac
OS Mac OS Lion

2013年5月15日水曜日

Sublime Textのチートシートを作ってみた

先日、Sublime Textのショートカットを使えこなせずにイライラしてました。そんな自分へ腹立ちまぎれにチートシートを作ってみました。
画像は自分が覚えて無い分、markdownの方はメニューのショートカットがあるコマンドを端から並べた感じです。画像を壁紙にしてチラ見して使ってます。
自分の環境に合したものなので、もし必要な方はmarkdown形式のものをスラっとコピって改変してみて下さい。

注意
  • Mac用です。
  • スペル等内容が間違えてる可能性はあります。
  • 日本語訳が正しいかは不明です。
    何か間違いなどあった場合は指摘して頂けると有難いです。m(_ _)m

画像



markdown 英語

## File
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| New File                          |                               | super + N                     |
| Open...                           |                               | super + O                     |
| Open Recent                       | Reopen Closed File            | shift + super + T             |
| Save                              |                               | super + S                     |
| Save As...                        |                               | shift + super + S             |
| Save All                          |                               | alt + super + S               |
| New Window                        |                               | shift + super + N             |
| Close Window                      |                               | shift + super + W             |
| Close File                        |                               | super + W                     |

## Edit
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Undo                              |                               | super + Z                     |
| Redo                              |                               | super + Y                     |
| Undo Selection                    | Soft Undo                     | super + U                     |
|                                   | Soft Redo                     | shift + super + U             |
| Copy                              |                               | super + C                     |
| Cut                               |                               | super + X                     |
| Paste                             |                               | super + V                     |
| Paste and Indet                   |                               | shift + super + V             |
| Line                              | Indent                        | super + \]                    |
|                                   | Unindent                      | super + \[                    |
|                                   | Swap Line Up                  | ctrl + super + ↑                |
|                                   | Swap Line Down                | ctrl + super + ↓                |
|                                   | Duplicate Line                | shift + super + D             |
|                                   | Delete Line                   | ctrl + shift + K              |
| Comment                           | Toggle Comment                | super + /                     |
|                                   | Toggle Block Comment          | alt + super + /               |
| Text                              | Insert Line Before            | shift + super + Enter         |
|                                   | Insert Line After             | super + Enter                 |
|                                   | Delete Line                   | ctrl + shift + K              |
|                                   | Delete to End                 | ctrl + K                      |
|                                   | Delete to Beginning           | super + Backspace             |
| Mark                              | Set Mark                      | super + K,super + space       |
|                                   | Select To Mark                | super + K,super + A           |
|                                   | Delete To Mark                | super + K,super + W           |
|                                   | Swap With Mark                | super + K,super + X           |
|                                   | Clear Mark                    | super + K,super + G           |
| Code Folding                      | Fold                          | alt + super + \[              |
|                                   | Unfold                        | alt + super + \]              |
|                                   | Unfold All                    | super + K, super + J          |
|                                   | Fold All                      | super + K, super + 1          |
|                                   | Fold Level 2(~9)              | super + K, super + 2(~9)      |
| Convert Case                      | Upper Case                    | super + K, super + U          |
|                                   | Lower Case                    | super + K, super + L          |
| Wrap                              | Wrap at Ruler                 | alt + super + Q               |
| Show Completions                  |                               | ctrl + space                  |
| Sort Lines                        |                               | F5                            |
| Sort Lines(Case Sensitive)        |                               | ctrl + F5                     |
| Special Characters...             |                               | alt + super + T               |



## Selection
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Split into Lines                  |                               | shift + super + L             |
| Add Previous Line                 |                               | ctrl + shift + ↑                |
| Add Next Line                     |                               | ctrl + shift + ↓                |
| Single Selection                  |                               | esc(??)                       |
| Select All                        |                               | super + A                     |
| Expand Selection to Line          |                               | super + L                     |
| Expand Selection to Word          |                               | super + D                     |
| Expand Selection to Scope         |                               | shift + super + space         |
| Expand Selection to Brackets      |                               | ctrl + shift + M              |
| Expand Selection to Indentation   |                               | shift + super + J             |
| Expand Selection to Tag           |                               | shift + super + A             |
| Abacus Align                      |                               | ctrl + alt + super + \]       |


## Find

| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Find...                           |                               | super + F                     |
| Find next                         |                               | super + G                     |
| Find previous                     |                               | shift + super + G             |
| Incremental Find                  |                               | super + I                     |
| Replace...                        |                               | alt + super + F               |
| Replace Next                      |                               | alt + super + E               |
| Quick Find                        |                               | alt + super + G               |
| Quick Find All                    |                               | ctrl + super + G              |
| Quick Add Next                    |                               | super + D                     |
| Use Selection for Find            |                               | super + E                     |
| Use Selection for Replace         |                               | shift + super + E             |
| Find in Files(Grep)               |                               | shift + super + F             |
| Find Results                      | Next Result                   | F4                            |
|                                   | Previous Result               | shift + F4                    |

## View
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Side Bar                          |                               | super + K, super + B          |
| Enter Full Screen                 |                               | ctrl + super + F              |
| Enter Distraction Free Mode       |                               | ctrl + shift + super + F      |
| Layout                            | Single                        | alt + super + 1               |
|                                   | Columns:2(~4)                 | alt + super + 2(~4)           |
|                                   | Rows:2(3)                     | alt + shift + super + 2(3)    |
|                                   | Grid:4                        | alt + super + 5               |
| Foucus Group                      | Group1(~4)                    | ctrl + 1(~4)                  |
| Move File To Group                | Group1(~4)                    | ctrl + shift + 1(~4)          |

## Goto
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Goto Anything...                  |                               | super + P                     |
| Goto Symbol                       |                               | super + R                     |
| Goto Line...                      |                               | ctrl + G                      |
| Previous change                   |                               | alt + shift + super + G       |
| Next change                       |                               | alt + shift + super + J       |
| Switch File                       | Next File                     | alt + super + →             |
|                                   | Previous File                 | alt + super + ←             |
|                                   | Next File in Stack            | ctrl + tab                    |
|                                   | Previous File in Stack        | ctrl + shift + tab            |
|                                   | Switch Header/Implementaion   | alt + super + ↑             |
|                                   | (opened files)                | super + 1(~9)                 |
| Scroll                            | Scroll to Selection           | ctrl + L                      |
|                                   | Line Up                       | ctrl + alt + ↑              |
|                                   | Line Down                     | ctrl + alt + ↓              |
| Bookmarks                         | Toggle Bookmark               | super + F2                    |
|                                   | Next Bookmark                 | F2                            |
|                                   | Prev Bookmark                 | shift + F2                    |
|                                   | Clear Bookmark                | shift + super + F2            |
| Jump to Matching Bracket          |                               | ctrl + M                      |


## Tools
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Command Palette...                |                               | shift + super + P             |
| Build                             |                               | super + B                     |
| Record Macro/Stop Recording Macro |                               | ctrl + Q                      |
| Playback Macro                    |                               | ctrl + shift + Q              |


## Project
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| Switch Project in Window...       |                               | ctrl + super + P              |


markdown 日本語

## ファイル
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 新規ファイル                        |                               | super + N                     |
| ファイルを開く                     |                               | super + O                     |
| 最近開いたファイル                   | 閉じたファイルを再度開く          | shift + super + T             |
| 保存                                |                               | super + S                     |
| 名前を付けて保存                  |                               | shift + super + S             |
| すべて保存                           |                               | alt + super + S               |
| 新しいウィンドウ                  |                               | shift + super + N             |
| ウィンドウを閉じる                   |                               | shift + super + W             |
| ファイルを閉じる                  |                               | super + W                     |

## 編集
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 元に戻す                          |                               | super + Z                     |
| やり直し                          |                               | super + Y                     |
| 選択を元に戻す                     | ソフトアンドウ                 | super + U                     |
|                                   | ソフトリドウ                    | shift + super + U             |
| コピー                             |                               | super + C                     |
| カット                             |                               | super + X                     |
| 貼り付け                          |                               | super + V                     |
| 貼り付けとインデント                    |                               | shift + super + V             |
| 行                                   | インデント                       | super + \]                    |
|                                   | アンインデント                 | super + \[                    |
|                                   | 上の行と入れ替え              | ctrl + super + ↑                |
|                                   | 下の行と入れ替え              | ctrl + super + ↓                |
|                                   | 行を複製                      | shift + super + D             |
|                                   | 行を削除                      | ctrl + shift + K              |
| コメント                          | コメントの切替え              | super + /                     |
|                                   | ブロックコメントの切替え          | alt + super + /               |
| テキスト                          | 上に行を挿入                    | shift + super + Enter         |
|                                   | 下に行を挿入                    | super + Enter                 |
|                                   | 行を削除                      | ctrl + shift + K              |
|                                   | 行末まで削除                    | ctrl + K                      |
|                                   | 行頭まで削除                    | super + Backspace             |
| マーク                             | マークを設定                    | super + K,super + space       |
|                                   | マークまで選択                 | super + K,super + A           |
|                                   | マークまで削除                 | super + K,super + W           |
|                                   | マークを入れ替え              | super + K,super + X           |
|                                   | マークを削除                    | super + K,super + G           |
| コードの折りたたみ                   | 折りたたみ                       | alt + super + \[              |
|                                   | 展開                            | alt + super + \]              |
|                                   | 全てをを展開                    | super + K, super + J          |
|                                   | 全てを折りたたみ              | super + K, super + 1          |
|                                   | 段階2(~9)で折りたたみ         | super + K, super + 2(~9)      |
| 大文字と小文字を変換                    | 大文字にする                    | super + K, super + U          |
|                                   | 小文字にする                    | super + K, super + L          |
| ラップ                             | ルーラーでラップ              | alt + super + Q               |
| 自動補完                          |                               | ctrl + space                  |
| 行でソート                           |                               | F5                            |
| 行でソート(大文字、小文字を区別)       |                               | ctrl + F5                     |
| 特殊文字                          |                               | alt + super + T               |



## 選択
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 複数行を分割して選択                    |                               | shift + super + L             |
| 上の行を選択に追加                   |                               | ctrl + shift + ↑                |
| 下の行を選択に追加                   |                               | ctrl + shift + ↓                |
| 一つの選択にする                  |                               | esc(??)                       |
| 全てを選択                           |                               | super + A                     |
| 行を選択                          |                               | super + L                     |
| 単語を選択                           |                               | super + D                     |
| スコープを選択                     |                               | shift + super + space         |
| 括弧内を選択                        |                               | ctrl + shift + M              |
| 同じ深さのインデントを選択           |                               | shift + super + J             |
| タグで選択???                  |                               | shift + super + A             |
| JSONを整形                         |                               | ctrl + alt + super + \]       |


## 検索
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 検索                                |                               | super + F                     |
| 次を検索                          |                               | super + G                     |
| 前を検索                          |                               | shift + super + G             |
| インクリメンタル検索???             |                               | super + I                     |
| 置換                                |                               | alt + super + F               |
| 次を置換                          |                               | alt + super + E               |
| クイック検索                        |                               | alt + super + G               |
| クイック検索 全て                 |                               | ctrl + super + G              |
| 次の検索結果を追加                   |                               | super + D                     |
| 選択単語で検索                     |                               | super + E                     |
| 選択単語で置換                     |                               | shift + super + E             |
| ファイル内検索(いわゆるグレップ)       |                               | shift + super + F             |
| 検索結果                          | 次の検索箇所                    | F4                            |
|                                   | 前の検索箇所                    | shift + F4                    |

## 表示
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| サイドバー                           |                               | super + K, super + B          |
| フルスクリーン                     |                               | ctrl + super + F              |
| 邪魔者を非表示にするモード           |                               | ctrl + shift + super + F      |
| レイアウト                           | Single                        | alt + super + 1               |
|                                   | 縦分割:2(~4)                   | alt + super + 2(~4)           |
|                                   | 横分割:2(3)                    | alt + shift + super + 2(3)    |
|                                   | 縦横2分割                     | alt + super + 5               |
| 作業グループ                        | Group1(~4)                    | ctrl + 1(~4)                  |
| グループにファイルを移動              | Group1(~4)                    | ctrl + shift + 1(~4)          |

## 移動
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 全部へ移動                           |                               | super + P                     |
| シンボル(クラス、メソッド等)へ移動    |                               | super + R                     |
| 行へ移動                          |                               | ctrl + G                      |
| 前の変更箇所                        |                               | alt + shift + super + G       |
| 次の変更箇所                        |                               | alt + shift + super + J       |
| ファイルの切替                     | 右のファイル                    | alt + super + →             |
|                                   | 左のファイル                    | alt + super + ←             |
|                                   | スタック内の次のファイル          | ctrl + tab                    |
|                                   | スタック内の前のファイル          | ctrl + shift + tab            |
|                                   | スイッチヘッダー???         | alt + super + ↑             |
|                                   | (開いているファイル)             | super + 1(~9)                 |
| スクロール                           | 選択部分へスクロール                | ctrl + L                      |
|                                   | 1行上へスクロール             | ctrl + alt + ↑              |
|                                   | 1行下へスクロール             | ctrl + alt + ↓              |
| ブックマーク                        | ブックマークのON/OFF           | super + F2                    |
|                                   | 次のブックマークへ               | F2                            |
|                                   | 前のブックマークへ               | shift + F2                    |
|                                   | ブックマークの削除               | shift + super + F2            |
| 対応するカッコへジャンプ              |                               | ctrl + M                      |


## ツール
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| コマンドパレット                  |                               | shift + super + P             |
| ビルド                             |                               | super + B                     |
| マクロの開始/停止                 |                               | ctrl + Q                      |
| マクロの実行                        |                               | ctrl + shift + Q              |


## プロジェクト
| command                           | sub command                   | Shortcut                      |
|-----------------------------------|-------------------------------|-------------------------------|
| 同じウィンドウでプロジェクトを切替       |                               | ctrl + super + P              |


markdownのプラグインと設定

ちなみにsublime textでのmarkdown用のプラグインはmarkdown previewを使用してます。
テーブル用のマークダウンはmarkdown previewのユーザー設定にgithub用にすれば使える様になります。

"parser": "github"

2013年5月5日日曜日

AngularJSのチュートリアルをCakePHPでやってみる。その3

Step5 XMLHttpRequestと依存性の注入

3日目のソースが欲しい方はこちらです。
サンプルページはこちらです。

jsonを表示する設定

routes.phpに以下を追加

Router::parseExtensions('json');

CakePHPのコントローラ作成

CakePHPのコントローラ、JsonController.phpを追加します。 これでjsonが表示されます。CakePHPのビューはありません。また、データは本来はDBにテーブル作ってinsertすべきでしょうけど、手間なので直接配列を書いてます。

<?php
App::uses('AppController', 'Controller');

/**
 * Static content controller
 *
 * Override this controller by placing a copy in controllers directory of an application
 *
 * @package     app.Controller
 * @link http://book.cakephp.org/2.0/en/controllers/pages-controller.html
 */
class JsonController extends AppController {

/**
 * Controller name
 *
 * @var string
 */
    public $name = 'Json';

/**
 * This controller does not use a model
 *
 * @var array
 */
    public $uses = array();

/**
 * レイアウトを決める
 */
    public $layout = "common";
 /**
  * コンポーネントの設定
  */
    public $components = array('Tools.ApiTool','RequestHandler');

/**
 * ヘルパーを設定する。
 */
    public $helpers = array();
/**
 * Displays a view
 *
 * @param mixed What page to display
 * @return void
 */
    public function index() {}

    public function api_get($type = null){
    // リクエストをデバッグログに書き出し
    $this->ApiTool->logingRequest($this->request);
    // 引数チェック。空か、指定タイプ以外だったら404エラー
    $this->ApiTool->checkType($type,array('phones'));
    // タイプごとにphonesを作り分ける。
    if ($type == 'phones'){
     $phones = $this->__getPhones();
     $this->set('phones',$phones);
    }
    // ビュークラスをJSONにする
    $this->viewClass = 'Json';
    $this->set('_serialize', array('phones'));
 }

    public function beforeFilter() {
        parent :: beforeFilter();
    }

    //スマートフォンのデータ。配列で返す。
    public function __getPhones(){
        $phones = array(
                array(
                    "age"=> 0, 
                    "id"=> "motorola-xoom-with-wi-fi", 
                    "imageUrl"=> "img/phones/motorola-xoom-with-wi-fi.0.jpg", 
                    "name"=> "Motorola XOOM\u2122 with Wi-Fi", 
                    "snippet"=> "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)."
                ), 
                array(
                    "age"=> 1, 
                    "id"=> "motorola-xoom", 
                    "imageUrl"=> "img/phones/motorola-xoom.0.jpg", 
                    "name"=> "MOTOROLA XOOM\u2122", 
                    "snippet"=> "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)."
                ), 
                array(
                    "age"=> 2, 
                    "carrier"=> "AT&amp;T", 
                    "id"=> "motorola-atrix-4g", 
                    "imageUrl"=> "img/phones/motorola-atrix-4g.0.jpg", 
                    "name"=> "MOTOROLA ATRIX\u2122 4G", 
                    "snippet"=> "MOTOROLA ATRIX 4G the world's most powerful smartphone."
                ), 
                array(
                    "age"=> 3, 
                    "id"=> "dell-streak-7", 
                    "imageUrl"=> "img/phones/dell-streak-7.0.jpg", 
                    "name"=> "Dell Streak 7", 
                    "snippet"=> "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around."
                ), 
                array(
                    "age"=> 4, 
                    "carrier"=> "Cellular South", 
                    "id"=> "samsung-gem", 
                    "imageUrl"=> "img/phones/samsung-gem.0.jpg", 
                    "name"=> "Samsung Gem\u2122", 
                    "snippet"=> "The Samsung Gem\u2122 brings you everything that you would expect and more from a touch display smart phone \u2013 more apps, more features and a more affordable price."
                ), 
                array(
                    "age"=> 5, 
                    "carrier"=> "Dell", 
                    "id"=> "dell-venue", 
                    "imageUrl"=> "img/phones/dell-venue.0.jpg", 
                    "name"=> "Dell Venue", 
                    "snippet"=> "The Dell Venue; Your Personal Express Lane to Everything"
                ), 
                //...
                //中略
                //...
                array(
                    "age"=> 19, 
                    "id"=> "motorola-charm-with-motoblur", 
                    "imageUrl"=> "img/phones/motorola-charm-with-motoblur.0.jpg", 
                    "name"=> "Motorola CHARM\u2122 with MOTOBLUR\u2122", 
                    "snippet"=> "Motorola CHARM fits easily in your pocket or palm.  Includes MOTOBLUR service."
                )
        );
        return $phones;
    }
}
?>

で、「/angularjs_tutorial/json/api_get/phones.json」にアクセスすると以下の様な画面でJSONが吐出されているのが確認出来ます。

AngularJSのコントローラを作成。

controllers.jsを修正。上で作ったJSONのデータを「$http.get()」メソッドで取得しています。公式のチュートリアルのコードは成功した時の処理しか無いですが、 動作がわかりにくいので失敗した時の処理も追加してます。
ここで追加されている「$http」はサービスというものらしいです。コントローラの引数に必要なサービスをその都度指定して利用するようです。
このへんがAngularJSの依存性の注入に当たる様な、そうで無いような…。どなたかわかる方教えて下さい。

function PhoneListCtrl($scope,$http) {
    $http.get('../json/api_get/phones.json').success(function(data,status) {
        console.log('success');
        console.log(data);
        console.log(status);
        $scope.phones = data.phones;
        //$scope.phones = data.phones.splice(0,5);  //実験用
    }).error(function(data, status) {
            console.log('error');
            console.log(data);
            console.log(status);
    });
}

view側に変更はありません。でサンプルページのように動作しているのが確認出来ます。
今日はこんな所で終わりです。ではでは。

環境とか

項目内容
PHPフレームワークCakephp 2.2.5
CSSフレームワークTwitter bootstrap 2.2.2
JSフレームワークAngularJS 1.0.5
IDESublimeText 2
開発環境?MAMP
PCiMac
OSMac OS Lion