<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7188801596800194629</atom:id><lastBuildDate>Sun, 01 Sep 2024 13:47:01 +0000</lastBuildDate><category>CakePHP</category><category>AngularJS</category><category>Twitter Bootstrap</category><category>symfony2</category><category>SublimeText2</category><category>mac</category><category>Eclipse</category><category>git</category><category>プログラミング</category><category>ワンダーデバイス</category><category>雑記</category><title>不肖者の人生実験</title><description></description><link>http://fusyomono1.blogspot.com/</link><managingEditor>noreply@blogger.com (busyomono99)</managingEditor><generator>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-5858740298008303809</guid><pubDate>Mon, 17 Jun 2013 21:52:00 +0000</pubDate><atom:updated>2013-06-18T06:52:44.452+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>AngularJSのチュートリアルをCakePHPでやってみる。その5</title><description>&lt;p&gt;4日目のソースが欲しい方は&lt;a href=&quot;https://github.com/busyoumono99/angularjs_tutorial/tree/day_5&quot;&gt;こちら&lt;/a&gt;です。&lt;br&gt;
サンプルページは&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step07/&quot;&gt;こちら&lt;/a&gt;です。&lt;/p&gt;

&lt;h4&gt;
&lt;a name=&quot;&quot; class=&quot;anchor&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;ルート設定と複数のビュー&lt;/h4&gt;

&lt;p&gt;ここではAngularJSで複数のビュー(テンプレート)を切り替える為の設定方法を新しくやるようです。
今までの方法はあくまで簡易的な方法で,実際は今回のやり方を推奨しているようです。&lt;/p&gt;

&lt;h4&gt;
&lt;a name=&quot;-1&quot; class=&quot;anchor&quot; href=&quot;#-1&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;大まかな概要&lt;/h4&gt;

&lt;p&gt;ページを開いた時は今まで通り、スマホの一覧が表示されます。リンクをクリックするとその詳細を開くといった画面を作ります。&lt;/p&gt;

&lt;h5&gt;
&lt;a name=&quot;-2&quot; class=&quot;anchor&quot; href=&quot;#-2&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;必要なもの&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;app.js：モジュールを指定する。その中で$routeProviderにURL、テンプレート、コントローラを指定する事で使えるようになるみたいです。&lt;/li&gt;
&lt;li&gt;controllers.js：これは今まで通りコントローラに、新たに&#39;PhoneDetailCtrl&#39;を追加します。&lt;/li&gt;
&lt;li&gt;index.html：表示の大枠のテンプレート。この中の一部が下2つのテンプレートに置き換えるようです。レイアウトテンプレートと呼んでいるようです。この辺はCakePHPと同じです。&lt;/li&gt;
&lt;li&gt;phone-list.html：一覧表示用のテンプレート&lt;/li&gt;
&lt;li&gt;phone-detail.html：詳細表示用のテンプレート。今回は中身はほぼ空です。&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;
&lt;a name=&quot;-3&quot; class=&quot;anchor&quot; href=&quot;#-3&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;内容&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;index.htmlに&lt;code class=&quot;code-container&quot;&gt;ng-app=&quot;phonecat&quot;&lt;/code&gt;、app.jsに&lt;code class=&quot;code-container&quot;&gt;angular.module(&#39;phonecat&#39;, []). ・・・&lt;/code&gt;と対応させる。&lt;/li&gt;
&lt;li&gt;index.htmlで「angular.js」「app.js」「controllers.js」を読み込む。&lt;/li&gt;
&lt;li&gt;index.htmlで他のテンプレートを差し込む部分に&lt;code&gt;&amp;lt;div ng-view&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;を設定する。&lt;/li&gt;
&lt;li&gt;app.jsで&lt;code class=&quot;code-container&quot;&gt;$routeProvider&lt;/code&gt;をURL、テンプレート、コントローラを設定する。&lt;/li&gt;
&lt;li&gt;差し込み部分の各テンプレートを用意する。
といった感じです。&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;
&lt;a name=&quot;cakephp&quot; class=&quot;anchor&quot; href=&quot;#cakephp&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;CakePHPでの設定&lt;/h4&gt;

&lt;p&gt;AngularJSをCakePHPで動作させる場合はルートプロバイダの設定を&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;when(&#39;/phones&#39;, {templateUrl: &#39;partials/phone-list.html&#39;,   controller: PhoneListCtrl})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;では無く、&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;when(&#39;/phones&#39;, {templateUrl: &#39;http://hogepage.com/angularjs/js/partials/phone-list.html&#39;,   controller: PhoneListCtrl})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;のようにテンプレートをフルパスで設定し、テンプレートファイル’phone-list.html’をCakePHPの「app/webroot/js/partials」に入れれば良いようです。&lt;br&gt;
どなたか、相対パスでも出来る方法知ってる方いらしたらご教授お願いします。&lt;/p&gt;

&lt;p&gt;後はAngularJS公式のチュートリアルと内容同じはずです。&lt;/p&gt;

&lt;p&gt;今回はこの辺で、ではでは。&lt;/p&gt;

&lt;h4&gt;
&lt;a name=&quot;-4&quot; class=&quot;anchor&quot; href=&quot;#-4&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;環境とか&lt;/h4&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHPフレームワーク&lt;/td&gt;
&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSSフレームワーク&lt;/td&gt;
&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSフレームワーク&lt;/td&gt;
&lt;td&gt;AngularJS 1.0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE&lt;/td&gt;
&lt;td&gt;SublimeText 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;開発環境?&lt;/td&gt;
&lt;td&gt;MAMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;iMac&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Mac OS Lion&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2013/06/angularjscakephp5.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-7616921232555685137</guid><pubDate>Tue, 21 May 2013 22:32:00 +0000</pubDate><atom:updated>2013-05-22T07:32:31.023+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>AngularJSのチュートリアルをCakePHPでやってみる。その4</title><description>&lt;p&gt;4日目のソースが欲しい方は&lt;a href=&quot;https://github.com/busyoumono99/angularjs_tutorial/tree/day_4&quot;&gt;こちら&lt;/a&gt;です。&lt;br&gt;
サンプルページは&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step06&quot;&gt;こちら&lt;/a&gt;です。&lt;/p&gt;

&lt;h4&gt;
&lt;a name=&quot;&quot; class=&quot;anchor&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;テンプレート内でのリンクと画像&lt;/h4&gt;

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

&lt;pre  class=&quot;code-container&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;#/phones/{{phone.id}}&quot; class=&quot;thumb&quot;&amp;gt;&amp;lt;img ng-src=&quot;/angularjs_tutorial/{{phone.imageUrl}}&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;#/phones/{{phone.id}}&quot;&amp;gt;{{phone.name}}&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;h4&gt;
&lt;a name=&quot;json&quot; class=&quot;anchor&quot; href=&quot;#json&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;Jsonの変更&lt;/h4&gt;

&lt;p&gt;今回、JsonController.phpを修正してます。&lt;/p&gt;

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

&lt;p&gt;上のメソッドを追加してます。&lt;br&gt;
JSON吐き出す部分を&lt;code  class=&quot;code-container&quot;&gt;$this-&amp;gt;set(&#39;_serialize&#39;, array(&#39;phones&#39;));&lt;/code&gt;では無く、&lt;code  class=&quot;code-container&quot;&gt;return new CakeResponse(array(&#39;body&#39; =&amp;gt; json_encode($phones)));&lt;/code&gt;
としてます。こちらでも同じようにJsonを吐き出しますが以前のと違いは、Jsonの一番外側に「CakeResponse」で指定した場合、例えば「’phones’」が付きません。&lt;br&gt;
こっちの方が都合が良いので今後はこっちを使用していくつもりです。&lt;br&gt;
以下比較&lt;br&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/json/api_get/phones.json&quot;&gt;serializeで作ったJSON&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/json/api_get2/phones.json&quot;&gt;CakeResponseで作ったJSON&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;ではでは。&lt;/p&gt;

&lt;h4&gt;
&lt;a name=&quot;-1&quot; class=&quot;anchor&quot; href=&quot;#-1&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;環境とか&lt;/h4&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHPフレームワーク&lt;/td&gt;
&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSSフレームワーク&lt;/td&gt;
&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSフレームワーク&lt;/td&gt;
&lt;td&gt;AngularJS 1.0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE&lt;/td&gt;
&lt;td&gt;SublimeText 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;開発環境?&lt;/td&gt;
&lt;td&gt;MAMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;iMac&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Mac OS Lion&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2013/05/angularjscakephp4.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-6966386731480683405</guid><pubDate>Tue, 14 May 2013 22:17:00 +0000</pubDate><atom:updated>2013-05-15T07:18:01.563+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SublimeText2</category><title>Sublime Textのチートシートを作ってみた</title><description>&lt;p&gt;先日、Sublime Textのショートカットを使えこなせずにイライラしてました。そんな自分へ腹立ちまぎれにチートシートを作ってみました。&lt;br&gt;
画像は自分が覚えて無い分、markdownの方はメニューのショートカットがあるコマンドを端から並べた感じです。画像を壁紙にしてチラ見して使ってます。&lt;br&gt;
自分の環境に合したものなので、もし必要な方はmarkdown形式のものをスラっとコピって改変してみて下さい。  &lt;/p&gt;

&lt;h5&gt;&lt;a name=&quot;&quot; class=&quot;anchor&quot; href=&quot;#&quot;&gt;&lt;span class=&quot;mini-icon mini-icon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;注意&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Mac用です。&lt;/li&gt;
&lt;li&gt;スペル等内容が間違えてる可能性はあります。&lt;/li&gt;
&lt;li&gt;日本語訳が正しいかは不明です。&lt;br&gt;
何か間違いなどあった場合は指摘して頂けると有難いです。m(_ _)m&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;
&lt;a name=&quot;-1&quot; class=&quot;anchor&quot; href=&quot;#-1&quot;&gt;&lt;span class=&quot;mini-icon mini-icon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;画像&lt;/h4&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7VZby2z4hATN79DIQIF-kXph56gUHLNo2kRFoJMJbGepvX_aUuBeCTwgXCiW5YE65aWlGC9Gjuhzq3THBxIWld0PFd5oG6W_1YAHrbE70ynldXsNFOuas6_kfuYjdKtaODBIjyf50oTg/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-14+13.13.50.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7VZby2z4hATN79DIQIF-kXph56gUHLNo2kRFoJMJbGepvX_aUuBeCTwgXCiW5YE65aWlGC9Gjuhzq3THBxIWld0PFd5oG6W_1YAHrbE70ynldXsNFOuas6_kfuYjdKtaODBIjyf50oTg/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-14+13.13.50.png&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h4&gt;&lt;a name=&quot;markdown-&quot; class=&quot;anchor&quot; href=&quot;#markdown-&quot;&gt;&lt;span class=&quot;mini-icon mini-icon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;markdown 英語&lt;/h4&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;## 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              |
&lt;/code&gt;&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h4&gt;&lt;a name=&quot;markdown--1&quot; class=&quot;anchor&quot; href=&quot;#markdown--1&quot;&gt;&lt;span class=&quot;mini-icon mini-icon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;markdown 日本語&lt;/h4&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;## ファイル
| 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              |
&lt;/code&gt;&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h4&gt;
&lt;a name=&quot;markdown&quot; class=&quot;anchor&quot; href=&quot;#markdown&quot;&gt;&lt;span class=&quot;mini-icon mini-icon-link&quot;&gt;&lt;/span&gt;&lt;/a&gt;markdownのプラグインと設定&lt;/h4&gt;

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

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;&quot;parser&quot;: &quot;github&quot;
&lt;/code&gt;&lt;/pre&gt;</description><link>http://fusyomono1.blogspot.com/2013/05/sublime-text.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7VZby2z4hATN79DIQIF-kXph56gUHLNo2kRFoJMJbGepvX_aUuBeCTwgXCiW5YE65aWlGC9Gjuhzq3THBxIWld0PFd5oG6W_1YAHrbE70ynldXsNFOuas6_kfuYjdKtaODBIjyf50oTg/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-14+13.13.50.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-3721698569478097710</guid><pubDate>Sat, 04 May 2013 18:31:00 +0000</pubDate><atom:updated>2013-05-05T03:35:10.481+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>AngularJSのチュートリアルをCakePHPでやってみる。その3</title><description>&lt;h4 id=&quot;step5-xmlhttprequest&quot;&gt;Step5 XMLHttpRequestと依存性の注入&lt;/h4&gt;

&lt;p&gt;3日目のソースが欲しい方は&lt;a href=&quot;https://github.com/busyoumono99/angularjs_tutorial/tree/day_3&quot;&gt;こちら&lt;/a&gt;です。 &lt;br /&gt;
サンプルページは&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step05&quot;&gt;こちら&lt;/a&gt;です。&lt;/p&gt;

&lt;h4 id=&quot;json&quot;&gt;jsonを表示する設定&lt;/h4&gt;

&lt;p&gt;routes.phpに以下を追加&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;Router::parseExtensions(&#39;json&#39;);
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;cakephp&quot;&gt;CakePHPのコントローラ作成&lt;/h4&gt;

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

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;&amp;lt;?php
App::uses(&#39;AppController&#39;, &#39;Controller&#39;);

/**
 * 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 = &#39;Json&#39;;

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

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

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

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

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

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

&lt;p&gt;で、「/angularjs_tutorial/json/api_get/phones.json」にアクセスすると以下の様な画面でJSONが吐出されているのが確認出来ます。&lt;/p&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34m9V99lFD5QBReYMJBdobGQrPJrIQt6q8r15g3iGo0BZkQld-ljiFK6ZhqD6jCcAPNGQHhaPWNC_rvR6Y0HwMTlDrzJm7kssL-8nLFaDk5F4HJozhkP1VHTJGdWhDLZm_DY5DuauV1Q/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-02+1.03.58.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34m9V99lFD5QBReYMJBdobGQrPJrIQt6q8r15g3iGo0BZkQld-ljiFK6ZhqD6jCcAPNGQHhaPWNC_rvR6Y0HwMTlDrzJm7kssL-8nLFaDk5F4HJozhkP1VHTJGdWhDLZm_DY5DuauV1Q/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-02+1.03.58.png&quot; /&gt;&lt;/a&gt;

&lt;h4 id=&quot;angularjs&quot;&gt;AngularJSのコントローラを作成。&lt;/h4&gt;

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

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;function PhoneListCtrl($scope,$http) {
    $http.get(&#39;../json/api_get/phones.json&#39;).success(function(data,status) {
        console.log(&#39;success&#39;);
        console.log(data);
        console.log(status);
        $scope.phones = data.phones;
        //$scope.phones = data.phones.splice(0,5);  //実験用
    }).error(function(data, status) {
            console.log(&#39;error&#39;);
            console.log(data);
            console.log(status);
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;view側に変更はありません。で&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step05&quot;&gt;サンプルページ&lt;/a&gt;のように動作しているのが確認出来ます。&lt;br/&gt;
今日はこんな所で終わりです。ではでは。&lt;/p&gt;
&lt;h4&gt;環境とか&lt;/h4&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JSフレームワーク&lt;/td&gt;&lt;td&gt;AngularJS 1.0.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;SublimeText 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2013/05/angularjscakephp3.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34m9V99lFD5QBReYMJBdobGQrPJrIQt6q8r15g3iGo0BZkQld-ljiFK6ZhqD6jCcAPNGQHhaPWNC_rvR6Y0HwMTlDrzJm7kssL-8nLFaDk5F4HJozhkP1VHTJGdWhDLZm_DY5DuauV1Q/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-05-02+1.03.58.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-6990458838792888426</guid><pubDate>Sun, 14 Apr 2013 12:52:00 +0000</pubDate><atom:updated>2013-04-14T21:52:37.509+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>AngularJSのチュートリアルをCakePHPでやってみる。その2</title><description>&lt;h4 id=&quot;github&quot;&gt;二日目のgithubコード&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/busyoumono99/angularjs_tutorial/tree/day2&quot;&gt;githubから&lt;/a&gt;必要な方はダウンロードして下さい。&lt;/p&gt;

&lt;h4 id=&quot;step3&quot;&gt;Step3 繰り返し内からの抽出&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step03&quot;&gt;Step3のサンプルページ&lt;/a&gt; &lt;br /&gt;
抽出機能を追加します。stepo3.ctpを以下のように変更。&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;
    &amp;lt;?php
    $this-&amp;gt;set(&#39;title_for_layout&#39;,Configure::read(&#39;Toutorial03.title&#39;));

    // bodyの属性にng-appを設定する。
    $this-&amp;gt;start(&#39;body_attr&#39;);
    echo &#39;ng-app&#39;;
    $this-&amp;gt;end();

    // sidebarにinnput要素を追加
    $this-&amp;gt;start(&#39;sidebar&#39;);
    ?&amp;gt;
    Search: &amp;lt;input ng-model=&quot;query&quot;&amp;gt;
    &amp;lt;?php
    $this-&amp;gt;end();

    // AngularJS用の設定、コード。
    $this-&amp;gt;start(&#39;script&#39;);
    // スクリプトを読み込む。
    echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js&#39;) . &quot;\n&quot;;
    echo $this-&amp;gt;Html-&amp;gt;script(&#39;step3/controllers.js&#39;) . &quot;\n&quot;;
    $this-&amp;gt;end();
    ?&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;div ng-controller=&quot;PhoneListCtrl&quot;&amp;gt;
            &amp;lt;h4&amp;gt;ビューとテンプレート&amp;lt;/h4&amp;gt;
            &amp;lt;ul&amp;gt;
                &amp;lt;li ng-repeat=&quot;phone in phones | filter:query&quot;&amp;gt;
                    {{phone.name}}
                    &amp;lt;p&amp;gt;{{phone.snippet}}&amp;lt;/p&amp;gt;
                &amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;

            &amp;lt;h4&amp;gt;以下実験&amp;lt;/h4&amp;gt;
            &amp;lt;p&amp;gt;  &amp;lt;div id=&quot;status&quot;&amp;gt;現在のフィルター: {{query}}&amp;lt;/div&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;AngularJS
&lt;ul&gt;
&lt;li&gt;ng-controller(controllers.js)は変更なし&lt;/li&gt;
&lt;li&gt;html側に標準のinputタグを追加。innputにはng-modelでqueryを設定。&lt;/li&gt;
&lt;li&gt;ng-repeatにfilter:queryを追加。これでqueryの内容で抽出する。&lt;/li&gt;
&lt;li&gt;特に指定無い場合はphone.name,phone.snippetの両方で抽出する。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cakephp
&lt;ul&gt;
&lt;li&gt;レイアウト側にbodyタグがあるので&lt;code&gt;$this-&amp;gt;start(&#39;body_attr&#39;);&lt;/code&gt;でレイアウトbody属性に設定&lt;/li&gt;
&lt;li&gt;レイアウト側でsidebarを分けているので&lt;code&gt;$this-&amp;gt;start(&#39;sidebar&#39;);&lt;/code&gt;でサイドバーの設定&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;step4&quot;&gt;Step4 双方向型のデータ連結&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step04&quot;&gt;Step4のサンプルページ&lt;/a&gt; &lt;br /&gt;
ソートの機能を追加します。 &lt;br /&gt;
step4.ctpの修正。 &lt;br /&gt;
サイドバー部分に以下を追加。&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;    Sort by:
    &amp;lt;select ng-model=&quot;orderProp&quot;&amp;gt;
        &amp;lt;option value=&quot;&quot; selected&amp;gt;unknown&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;name&quot;&amp;gt;アルファベット順&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;age&quot;&amp;gt;新作順&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ng-repeatの値に
&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;    | orderBy:orderProp
&lt;/code&gt;&lt;/pre&gt;
を追加  &lt;/p&gt;

&lt;p&gt;controllers.jsの修正。各データにageを追加。&lt;/p&gt;

&lt;p&gt;これだけでセレクトタグからソート順を選択できる。楽ちんすぎて心が痛いです。&lt;/p&gt;

&lt;p&gt;今日はこんな所で終わりです。ではでは。&lt;/p&gt;
&lt;h4&gt;環境とか&lt;/h4&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JSフレームワーク&lt;/td&gt;&lt;td&gt;AngularJS 1.0.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;SublimeText 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description><link>http://fusyomono1.blogspot.com/2013/04/angularjscakephp2.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-7610798431225624515</guid><pubDate>Mon, 08 Apr 2013 14:13:00 +0000</pubDate><atom:updated>2013-04-08T23:15:33.675+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>AngularJSのチュートリアルをCakePHPでやってみる。その１</title><description>&lt;h4 id=&quot;angularjs&quot;&gt;AngularJSのチュートリアルをやって行きたいと思います。&lt;/h4&gt;

&lt;p&gt;AngularJSをいじるのに限界がきたので、&lt;a href=&quot;http://docs.angularjs.org/tutorial&quot;&gt;公式のチュートリアル&lt;/a&gt;をやって理解を深めようと決心しました。&lt;br/&gt;
せっかくなので覚えたてのgithubでコードを公開しようと思います。&lt;a href=&quot;https://github.com/busyoumono99/angularjs_tutorial/tree/day_1&quot;&gt;本日分はこちら&lt;/a&gt;&lt;br/&gt;
サンプルサイトも公開します。&lt;br/&gt;
なお、busyoumonoは英語読めないので感覚で書いてます。なんか違う！って時はご教授お願いします。&lt;/p&gt;

&lt;h4 id=&quot;cakephp&quot;&gt;CakePHP側の準備&lt;/h4&gt;

&lt;p&gt;普通にCakePHPをダウンロードして解凍してってヤツです。説明しているサイトは他にもあるので割愛します。githubでコード見てもらえばわかると思います。&lt;/p&gt;

&lt;h4 id=&quot;step0&quot;&gt;Step0 準備と基本&lt;/h4&gt;

&lt;h5 id=&quot;angularjs-2&quot;&gt;AngularJSファイルの読み込み&lt;/h5&gt;

&lt;p&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step00&quot;&gt;サンプルサイト Step0&lt;/a&gt; &lt;br&gt;
Setp00.ctpで&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;$this-&amp;gt;start(&#39;script&#39;);
echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js&#39;) . &quot;\n&quot;;
$this-&amp;gt;end();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;のように書いてAngularJSを読み込みます。&lt;/p&gt;

&lt;h5 id=&quot;ng-app&quot;&gt;ng-app&lt;/h5&gt;

&lt;p&gt;属性にng-appをつけると、その要素内でAngularJSを使う宣言になる模様。&lt;/p&gt;

&lt;h5 id=&quot;2&quot;&gt;2個の波括弧&lt;/h5&gt;

&lt;p&gt;波括弧で囲むと簡単な式を実行して表示するようになる。&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;まだここには、何も{{&#39;ありません&#39; + &#39;!&#39;}}
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;step1&quot;&gt;Step1 静的なテンプレート&lt;/h4&gt;

&lt;h5&gt;静的なテンプレートを試す&lt;/h5&gt;

&lt;p&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step01&quot;&gt;サンプルサイト Step1&lt;/a&gt; &lt;br&gt;
Setp01.ctpで&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;span&amp;gt;Nexus S&amp;lt;/span&amp;gt;
        &amp;lt;p&amp;gt;
            Fast just got faster with Nexus S.
        &amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;span&amp;gt;Motorola XOOM™ with Wi-Fi&amp;lt;/span&amp;gt;
        &amp;lt;p&amp;gt;
            The Next, Next Generation tablet.
        &amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;Total number of phones: 2&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;と書き直し。リストが表示されたらOK。ここはそれだけ。&lt;/p&gt;

&lt;h4 id=&quot;step2-angularjs&quot;&gt;Step2 AngularJSのテンプレート&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://dream-travel.boo.jp/angularjs_tutorial/toutorial/step02&quot;&gt;サンプルサイト Step2&lt;/a&gt; &lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AngularJSは    Model-View-Controller (MVC) 設計パターンを利用している。&lt;/li&gt;
&lt;li&gt;AngularJSはHTMLをテンプレートとして使う模様。&lt;/li&gt;
&lt;li&gt;HTMLの中に波括弧2つで囲み、モデルを表示する。&lt;/li&gt;
&lt;li&gt;PHPのフレームワークと違って Model-View の結び付きが強い模様。ViewがModelを手放さないって感じ。&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;ng-controller&quot;&gt;ng-controllerの設定&lt;/h5&gt;

&lt;p&gt;Step02.ctpで&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;&amp;lt;div ng-controller=&quot;PhoneListCtrl&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;と書いてコントローラを指定している。&lt;br/&gt;
コントローラは webroot/js/step2/controllers.js ファイルを作って&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;function PhoneListCtrl($scope) \{
    $scope.phones = [
        {&quot;name&quot;: &quot;Nexus S&quot;,
         &quot;snippet&quot;: &quot;Fast just got faster with Nexus S.&quot;},
        {&quot;name&quot;: &quot;Motorola XOOM™ with Wi-Fi&quot;,
         &quot;snippet&quot;: &quot;The Next, Next Generation tablet.&quot;},
        {&quot;name&quot;: &quot;MOTOROLA XOOM™&quot;,
         &quot;snippet&quot;: &quot;The Next, Next Generation tablet.&quot;}
    ];
\}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で保存する。&lt;br/&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ビュー側で使うコントローラを指定する。&lt;/li&gt;
&lt;li&gt;js側でコントローラを作成する。&lt;/li&gt;
&lt;li&gt;コントローラの引数 $scope はAngularJSで使われる大事な変数みたい。&lt;/li&gt;
&lt;li&gt;今回のコントローラは「phones」というモデル（データ）を設定してるだけ。&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;ng-repeat&quot;&gt;ng-repeat&lt;/h5&gt;

&lt;p&gt;この属性を指定した要素を繰り返す。&lt;br/&gt;
Step02.ctp&lt;/p&gt;

&lt;pre class=&quot;code-container&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li ng-repeat=&quot;phone in phones&quot;&amp;gt;
        {{phone.name}}
        &amp;lt;p&amp;gt;{{phone.snippet}}&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;コントローラに設定されたphonesのモデルをループ処理している。&lt;/li&gt;
&lt;li&gt;liタグを繰り返す。&lt;/li&gt;
&lt;li&gt;phone.nameやphone.snippetで各データを表示できる。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step2までは以上です。&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;環境とか&lt;/h4&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JSフレームワーク&lt;/td&gt;&lt;td&gt;AngularJS 1.0.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;SublimeText 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2013/04/angularjscakephp.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-41924258736796642</guid><pubDate>Sat, 06 Apr 2013 16:25:00 +0000</pubDate><atom:updated>2013-04-07T01:25:13.763+09:00</atom:updated><title>gitメモ</title><description>&lt;p&gt;
gitについて、ドットインストールさんのサイトで勉強しました。&lt;br&gt;
以下、その時のメモ的なものです。
&lt;/p&gt;

&lt;br&gt;
&lt;h4&gt;linuxコマンド&lt;/h4&gt;
&lt;p&gt;
 &lt;dl&gt;
  &lt;dt&gt;pwd&lt;/dt&gt;
  &lt;dd&gt;現在いるディレクトリを表示する。&lt;/dd&gt;
  &lt;dt&gt;mkdir dirname&lt;/dt&gt;
  &lt;dd&gt;ディレクトリ作成&lt;/dd&gt;
  &lt;dt&gt;cd dirname&lt;/dt&gt;
  &lt;dd&gt;ディレクトリを移動&lt;/dd&gt;
  &lt;dt&gt;cat filename&lt;/dt&gt;
  &lt;dd&gt;ファイルの中身を確認&lt;/dd&gt;
  &lt;dt&gt;vim filename&lt;/dt&gt;
  &lt;dd&gt;filenameでテキストエディタを新規作成&lt;/dd&gt;
 &lt;/dl&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;ヴァージョン管理の流れ&lt;/h4&gt;
&lt;p&gt;
 &lt;ol&gt;
  &lt;li&gt;ファイルを作ったり修正たり&lt;/li&gt;
  &lt;li&gt;ある程度のまとまりになったら&lt;/li&gt;
  &lt;li&gt;履歴データベースに保存する&lt;/li&gt;
 &lt;/ol&gt;
 git上での呼び方
 &lt;ol&gt;
  &lt;li&gt;作業ディレクトリ&lt;/li&gt;
  &lt;li&gt;ステージングエリア（インデックス）&lt;/li&gt;
  &lt;li&gt;リポジトリ（ローカル、リモート）&lt;/li&gt;
 &lt;/ol&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;gitコマンド&lt;/h4&gt;
&lt;p&gt;
 &lt;dl&gt;
  &lt;dt&gt;git --version&lt;/dt&gt;
  &lt;dd&gt;gitのバージョン情報を表示する。&lt;/dd&gt;
  &lt;dt&gt;git config --global user.name ”{your name}&quot;&lt;/dt&gt;
  &lt;dd&gt;gitの名前の設定。（必須）&lt;/dd&gt;
  &lt;dt&gt;git config --global user.email &quot;{your email}&quot;&lt;/dt&gt;
  &lt;dd&gt;gitのメールの設定。（必須）&lt;/dd&gt;
  &lt;dt&gt;git config --global color.ui true&lt;/dt&gt;
  &lt;dd&gt;色分け表示の設定。&lt;/dd&gt;
  &lt;dt&gt;git config -l&lt;/dt&gt;
  &lt;dd&gt;gitの設定一覧表示。&lt;/dd&gt;
  &lt;dt&gt;git config --help &lt;br&gt;
  git help config&lt;/dt&gt;
  &lt;dd&gt;configのヘルプ&lt;/dd&gt;
  &lt;dt&gt;git config --global alias.co checkout &lt;br&gt;
  git config --global alias.st status &lt;br&gt;
  git config --global alias.br branch &lt;br&gt;
  git config --global alias.ci commit&lt;/dt&gt;
  &lt;dd&gt;コマンドにエイリアス（短縮名）を設定する。一番上はチェックアウトの短縮名をcoに設定してる。&lt;/dd&gt;

  &lt;dt&gt;git init&lt;/dt&gt;
  &lt;dd&gt;gitを使用する宣言。その作業ディレクトリ上で実行する。&lt;/dd&gt;

  &lt;dt&gt;git add filename&lt;/dt&gt;
  &lt;dd&gt;ステージングエリアにfilenameを登録&lt;/dd&gt;
  &lt;dt&gt;git add .&lt;/dt&gt;
  &lt;dd&gt;ステージングエリアにディレクトリ以下の全てのファイルを登録&lt;/dd&gt;
  &lt;dt&gt;git commit&lt;/dt&gt;
  &lt;dd&gt;リポジトリに登録。テキストエディタが起動してメッセージ入力する&lt;/dd&gt;
  &lt;dt&gt;git commit -m &quot;(message)&quot;&lt;/dt&gt;
  &lt;dd&gt;リポジトリに登録。メッセージはそのまま入力できる。&lt;/dd&gt;
  &lt;dt&gt;git commit --amend&lt;/dt&gt;
  &lt;dd&gt;細かい修正のみで、新しくコミットする程でもない場合、リポジトリに登録した直前の内容で再登録する。&lt;/dd&gt;
  &lt;dt&gt;git commit -am&quot;(message)&quot;&lt;/dt&gt;
  &lt;dd&gt;addしつつcommitする。&lt;/dd&gt;
  &lt;dt&gt;git log&lt;/dt&gt;
  &lt;dd&gt;コミットの内容を確認する。
   &lt;ul&gt;
    &lt;li&gt;コミットid&lt;/li&gt;
    &lt;li&gt;コミットした人&lt;/li&gt;
    &lt;li&gt;コミットした日時&lt;/li&gt;
    &lt;li&gt;コミットのメッセージ&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/dd&gt;
  &lt;dt&gt;git log --oneline&lt;/dt&gt;
  &lt;dd&gt;ログの簡素版。
   &lt;ul&gt;
    &lt;li&gt;idの上数桁&lt;/li&gt;
    &lt;li&gt;メッセージ&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/dd&gt;
  &lt;dt&gt;git log -p&lt;/dt&gt;
  &lt;dd&gt;ログの詳細 &lt;br&gt;
   変更箇所まで表示する。&lt;/dd&gt;
  &lt;dt&gt;git log --stat&lt;/dt&gt;
  &lt;dd&gt;どのファイルが何箇所変更された数を表示する。&lt;/dd&gt;
  &lt;dt&gt;git status&lt;/dt&gt;
  &lt;dd&gt;ステージングエリアやリポジトリとの差。&lt;/dd&gt;
  &lt;dt&gt;git checkout -- filename&lt;/dt&gt;
  &lt;dd&gt;ステージングエリアの内容に作業ディレクトリを戻す。&lt;/dd&gt;
  &lt;dt&gt;git diff&lt;/dt&gt;
  &lt;dd&gt;ディレクトリとステージングエリアの変更箇所を表示。&lt;/dd&gt;
  &lt;dt&gt;git diff --cached&lt;/dt&gt;
  &lt;dd&gt;リポジトリとステージングエリアの変更箇所を表示&lt;/dd&gt;
  &lt;dt&gt;git rm filename&lt;/dt&gt;
  &lt;dd&gt;一度登録したファイルを削除した場合に、git上からも削除する。&lt;/dd&gt;
  &lt;dt&gt;git mv filename&lt;/dt&gt;
  &lt;dd&gt;一度登録したファイルを移動した場合に、git上からも移動する。&lt;/dd&gt;
  &lt;dt&gt;git reset --hard HEAD&lt;/dt&gt;
  &lt;dd&gt;直前コミット内容に戻す。--hard作業ディレクトリもステージングエリアも一気に戻す。&lt;/dd&gt;
  &lt;dt&gt;git reset --hard HEAD^&lt;/dt&gt;
  &lt;dd&gt;直前の1つ前のコミットに戻す。HEAD^の部分はコミットidでもOK。&lt;/dd&gt;
  &lt;dt&gt;git reset --hard ORIG_HEAD&lt;/dt&gt;
  &lt;dd&gt;resetで戻った処理をやり直す。一度のみ。&lt;/dd&gt;
  &lt;dt&gt;git branch&lt;/dt&gt;
  &lt;dd&gt;ブランチの一覧表示。ブランチは分岐。初回のブランチ名はmaster。現状のブランチにアスタリスクついてる&lt;/dd&gt;
  &lt;dt&gt;git branch (branch name)&lt;/dt&gt;
  &lt;dd&gt;ブランチの新規作成。&lt;/dd&gt;
  &lt;dt&gt;git checkout (branch name)&lt;/dt&gt;
  &lt;dd&gt;ブランチの切り替え。&lt;/dd&gt;
  &lt;dt&gt;git checkout -b (branch name)&lt;/dt&gt;
  &lt;dd&gt;ブランチを作成しつつ、ブランチの切り替え&lt;/dd&gt;
  &lt;dt&gt;git merge (branch name)&lt;/dt&gt;
  &lt;dd&gt;マージは混ぜるの意味。別ブランチで追加した変更を現在いるブランチに適応させる。&lt;/dd&gt;
  &lt;dt&gt;git branch -d (branch name)&lt;/dt&gt;
  &lt;dd&gt;ブランチの削除。マージ後に実行する。&lt;/dd&gt;
  &lt;dt&gt;git branch --merged&lt;/dt&gt;
  &lt;dd&gt;現在いるブランチにマージされたブランチ一覧を表示する。&lt;/dd&gt;
  &lt;dt&gt;git tag&lt;/dt&gt;
  &lt;dd&gt;tagはコミットidの別名。タグの一覧表示。&lt;/dd&gt;
  &lt;dt&gt;git tag (tag name)&lt;/dt&gt;
  &lt;dd&gt;直前のコミットにタグ名をつける。&lt;/dd&gt;
  &lt;dt&gt;git tag (tag name) (commit id)&lt;/dt&gt;
  &lt;dd&gt;指定されたコミットにタグ名をつける。&lt;/dd&gt;
  &lt;dt&gt;git tag -d (tag name)&lt;/dt&gt;
  &lt;dd&gt;指定されたタグを削除する。&lt;/dd&gt;
  &lt;dt&gt;git show (tag name)&lt;/dt&gt;
  &lt;dd&gt;タグ名で指定されたコミット内容を表示する。&lt;/dd&gt;
 &lt;/dl&gt;
&lt;/p&gt;



&lt;h4&gt;gitの管理に含めない方法&lt;/h4&gt;
&lt;p&gt;
 以下のファイルを作成して設定内容を保存する。
 &lt;dl&gt;
  &lt;dt&gt;vim .gitignore&lt;/dt&gt;
  &lt;dd&gt;git管理に含めないファイルを登録する。サブディレクトリにも適応される。
  *.log&lt;/dd&gt;
 &lt;/dl&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;コンフリクトの対処&lt;/h4&gt;
&lt;p&gt;
 &lt;dl&gt;
  &lt;dt&gt;コンフリクトとは&lt;/dt&gt;
  &lt;dd&gt;マージの際に同じ箇所が変更された場合は、コンフリクト（衝突）が発生して手動で修正が必要になる。&lt;/dd&gt;
  &lt;dt&gt;コンフリクトの修正&lt;/dt&gt;
  &lt;dd&gt;vim filename &lt;br&gt;
  　　　コンフリクトを起こしているファイルをテキストエディタで開く。コンフリクトの内容が表示されるのでいい具合に修正して保存。&lt;/dd&gt;
 &lt;/dl&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;共有リポジトリ関連&lt;/h4&gt;
&lt;p&gt;
 &lt;dl&gt;
  &lt;dt&gt;git init --bare&lt;/dt&gt;
  &lt;dd&gt;
   共有リポジトリを作成する。ディレクトリ名に.gitを付けるのが慣例。
   &lt;div class=&quot;code-container&quot;&gt;
    &lt;pre&gt;mkdir ourweb.git
cd ourweb.git
git init --bare&lt;/pre&gt;
   &lt;/div&gt;
  &lt;/dd&gt;
  &lt;dt&gt;git remote add origin (repos location)&lt;/dt&gt;
  &lt;dd&gt;リモートの設定。&lt;/dd&gt;
  &lt;dt&gt;git push origin master&lt;/dt&gt;
  &lt;dd&gt;共有リポジトリに向かってmasterブランチの内容を突っ込む。&lt;/dd&gt;
  &lt;dt&gt;git clone&lt;/dt&gt;
  &lt;dd&gt;共有リポジトリの内容をコピーする&lt;/dd&gt;
  &lt;dt&gt;git pull&lt;/dt&gt;
  &lt;dd&gt;共有リポジトリの内容を現在の作業ディレクトリにマージする。&lt;br&gt;
 他の人が共有リポジトリにpushした場合は、自分が新しくpushする前にpullをする必要がある。&lt;/dd&gt;
  &lt;dt&gt;&lt;/dt&gt;
  &lt;dd&gt;&lt;/dd&gt;
 &lt;/dl&gt;
&lt;/p&gt;
</description><link>http://fusyomono1.blogspot.com/2013/04/git.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-3110474388314086314</guid><pubDate>Fri, 05 Apr 2013 15:11:00 +0000</pubDate><atom:updated>2013-04-06T00:11:05.707+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">git</category><category domain="http://www.blogger.com/atom/ns#">mac</category><title>Macにgitをインストールしてみました。</title><description>&lt;p&gt;
 ずっと気になっていたgitを始めようと思いたち、差し当たってmacにgitをインストールしてみました。なんだかんだで時間かかりました。
&lt;/p&gt;

&lt;h4&gt;方法&lt;/h4&gt;
&lt;p&gt;
インストールする方法はいくつかあるようですが、今回はmacportsを使う方法で行いました。
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;Xcodeのインストール&lt;/h4&gt;
&lt;p&gt;
 Xcodeは元々インストールしてあったので、詳細は不明ですがApp Storeからインストールします。検索すれば出てくるので特に問題ないと思います。
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;MacPortsのインストール&lt;/h4&gt;
&lt;p&gt;
 &lt;a href=&quot;http://weble.org/2010/06/17/macports&quot;&gt;こちら&lt;/a&gt; や&lt;a href=&quot;http://h2ham.seesaa.net/article/151613628.html&quot;&gt;こちら&lt;/a&gt;
 を参考にインストールしました。&lt;br/&gt;
 &lt;a href=&quot;http://www.macports.org/&quot;&gt;MacPortsの公式サイト&lt;/a&gt;の右上の「Download」ボタンをクリック→
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;“pkg” installers for Mountain Lion, Lion and Snow Leopard,...&lt;/pre&gt;
 &lt;/div&gt;
 の部分で対応するOSのリンクをクリック。pkgのダウンロードが始まります。&lt;br&gt;
 pkgをダブルクリックして指示通りにインストールします。
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;gitのインストール&lt;/h4&gt;
&lt;p&gt;
 ターミナルを開き
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;sudo port install git-core&lt;/pre&gt;
 &lt;/div&gt;
 を実行。そしてエラーorz
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;Warning: Xcode appears to be installed but xcodebuild is unusable; some ports will likely fail to build.
...&lt;/pre&gt;
 &lt;/div&gt;
 といった感じで表示されました。
 エラーでない場合は「gitのインストールに再挑戦」の途中から続けて下さい。
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;Command Line Tool for Xcodeをインストールする。&lt;/h4&gt;
&lt;p&gt;
 ぐぐったら&lt;a href=&quot;http://morikuma.org/blog/348&quot;&gt;こちらの&lt;/a&gt;記事に当たりました。
 早速Xcodeを起動。&lt;br/&gt;
 メニューのXcode -&gt; Open Developer Tool -&gt; More Developer Tools…をクリック。&lt;br/&gt;
 ブラウザが立ち上がり、AppleID入力画面に。素直に入力して最新の「Command Line Tool for Xcode」をクリック。&lt;br/&gt;
 ここでもつまづく。&lt;br/&gt;
        &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsEreIEFn226ShlGimU8a0VJ0C1R9H8yDvY_zFDQOqTZWehcs5YaC0q_YbSDZ78DflsaJASFXA1cWN7DCRaTHtTEv5kFi8qlj2mF0JFSEG7LR5DRapXO9TRgsCgKSKidUQga87XkDLl8Y/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-05+16.58.55.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsEreIEFn226ShlGimU8a0VJ0C1R9H8yDvY_zFDQOqTZWehcs5YaC0q_YbSDZ78DflsaJASFXA1cWN7DCRaTHtTEv5kFi8qlj2mF0JFSEG7LR5DRapXO9TRgsCgKSKidUQga87XkDLl8Y/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-05+16.58.55.png&quot; /&gt;&lt;/a&gt;
 画像の赤丸部分をクリックしても何も無い画面が開くだけ。&lt;br/&gt;
       &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYT5PVRgQtIHlGzLhRFrvNg6qbkBlJaAliHIlPmSn7Le_kKciXz8LeEo0zMBx7uOhi64CYMNqSR5qVG57lZWiEfefK9Iuj1wUXQ6uBw0fHdlwOglZQFop5FR9FxecFuc6GJYjav1NmA8/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-05+17.00.10.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYT5PVRgQtIHlGzLhRFrvNg6qbkBlJaAliHIlPmSn7Le_kKciXz8LeEo0zMBx7uOhi64CYMNqSR5qVG57lZWiEfefK9Iuj1wUXQ6uBw0fHdlwOglZQFop5FR9FxecFuc6GJYjav1NmA8/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-05+17.00.10.png&quot; /&gt;&lt;/a&gt;←こんな感じ&lt;br&gt;
        色々触っているうちに「cmd+クリック」でダウンロードが開始しました。&lt;br/&gt;
 ひょっとしたらブラウザがChromeだったせいかも知れません。Safariなら問題なかったかも。試してません。&lt;br/&gt;
 ダウンロードしてdmgファイルからインストールします。
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;gitのインストールに再挑戦&lt;/h4&gt;
&lt;p&gt;
 ターミナルを開き
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;sudo port install git-core&lt;/pre&gt;
 &lt;/div&gt;
 を実行。今度はインストール開始しました。&lt;br&gt;
 それなりに時間かかりました。10分弱ぐらい？でした。
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;No broken files found.&lt;/pre&gt;
 &lt;/div&gt;
 と表示されたらインストール終了です。
&lt;/p&gt;
&lt;br&gt;
&lt;h4&gt;確認&lt;/h4&gt;
&lt;p&gt;
 ターミナルで
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;git --help&lt;/pre&gt;
 &lt;/div&gt;
 を実行。説明文らしきものが表示されたらOKです。&lt;br&gt;
 これから&lt;a href=&quot;http://dotinstall.com/&quot;&gt;ドットインストールさんのサイト&lt;/a&gt;で勉強です。
&lt;/p&gt;
</description><link>http://fusyomono1.blogspot.com/2013/04/macgit.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsEreIEFn226ShlGimU8a0VJ0C1R9H8yDvY_zFDQOqTZWehcs5YaC0q_YbSDZ78DflsaJASFXA1cWN7DCRaTHtTEv5kFi8qlj2mF0JFSEG7LR5DRapXO9TRgsCgKSKidUQga87XkDLl8Y/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-05+16.58.55.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-5614199038518312054</guid><pubDate>Mon, 01 Apr 2013 15:36:00 +0000</pubDate><atom:updated>2013-04-02T00:42:27.086+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>AngularUIのdatepickerを使ってみた</title><description>&lt;h4&gt;AngularUIって?&lt;/h4&gt;
&lt;p&gt;
 相変わらずAngularJSと格闘する日々が続いてます。先日AngularJSについてググってたら &lt;a href=&quot;http://angular-ui.github.com/&quot;&gt;AngularUI&lt;/a&gt;なるものを見つけました。&lt;br/&gt;
 当方、英語は読めないので推測ですが、どうやらAngularJSを拡張して色々なUIが使えるようになるようです。jQueryとjQueryUIみたいな関係です。&lt;br/&gt;
 どんなものがあるかはリンク先を見てもらえばサンプルが沢山あるのでなんとなくわかると思います。&lt;br/&gt;
 ちょっと必要に迫られてAngularUIのDatepicker（AngularUI内での名前はDateです）を使ってみました。その時の内容です。
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;準備編&lt;/h4&gt;
&lt;p&gt;まず必要なファイルをダウンロードします。&lt;br/&gt;
&lt;a href=&quot;http://angular-ui.github.com/&quot;&gt;AngularUI&lt;/a&gt;の「Download」をクリックするとgithubのダウンロードページに行きます。&lt;br/&gt;
そのページからzipファイルをダウンロードします。今回はv0.4.0のzipを使いました。解凍して展開したディレクトリ「angular-ui-0.4.0」を適当なWebページにコピーします。Cakephpなら「webroot/js」です。&lt;br/&gt;
当然この他にAngularJSも必要ですがGoogleライブラリAPIの「ajax.googleapis.com」から読み込むのでダウンロードしません。&lt;br&gt;
後、CSSのTwitterBootstrapもダウンロードしておきます。こちらはCakephpでいう所の「webroot/css」に放り込んでおきます。
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;設定編1 ファイルの読み込み&lt;/h4&gt;
&lt;p&gt;
AngularUIを使えるようにphpファイルで設定が2つほど必要です。&lt;br&gt;
注意:今回はDatepickerを使うための設定ですが、これで他のUI(例えばSelect2)はjavascriptでエラーが出て使えなかったので他にも設定やファイル必要かもしれません。注意終わり&lt;br/&gt;
&lt;br/&gt;
htmlのheadタグ内でファイルの読み込み設定をします。&lt;br/&gt;
読み込むjsファイルは
&lt;ol&gt;
 &lt;li&gt;jQuery&lt;/li&gt;
 &lt;li&gt;jQueryUI&lt;/li&gt;
 &lt;li&gt;AngularJS&lt;/li&gt;
 &lt;li&gt;AngularUI&lt;/li&gt;
&lt;/ol&gt;
です。読み込む順も上の通りでないとエラーが出るようです。&lt;br/&gt;
cakephpのコードで書くと
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&#39;) . &quot;\n&quot;;
echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js&#39;) . &quot;\n&quot;;
echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js&#39;) . &quot;\n&quot;;
echo $this-&amp;gt;Html-&amp;gt;script(&#39;angular-ui-0.4.0/build/angular-ui&#39;) . &quot;\n&quot;;&lt;/pre&gt;
&lt;/div&gt;
といった感じです。&lt;br&gt;
またこの他にCSSファイルも読み込みます。
&lt;ol&gt;
 &lt;li&gt;Twitter bootstrap&lt;/li&gt;
 &lt;li&gt;jQueryUI&lt;/li&gt;
 &lt;li&gt;AngularUI&lt;/li&gt;
&lt;/ol&gt;
こちらは順番関係無いはずです。試してませんが。&lt;br/&gt;
同じくCakephpのコードで書くと
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;echo $this-&amp;gt;Html-&amp;gt;css(array(&#39;bootstrap.min&#39;,&#39;bootstrap-responsive&#39;,&#39;cake_bootstrap&#39;,&#39;pazudoraken&#39;)) . &quot;\n&quot;;
echo $this-&amp;gt;Html-&amp;gt;css(array(&#39;/js/angular-ui-0.4.0/build/angular-ui&#39;)) . &quot;\n&quot;;
echo $this-&amp;gt;Html-&amp;gt;css(array(&#39;https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css&#39;)) . &quot;\n&quot;;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;設定編2 AngularJSのモジュール設定&lt;/h4&gt;
&lt;p&gt;
 続いてAngularJSにAngularUIを使うよ〜、って教えて上げます。（多分）&lt;br/&gt;
 htmlの要素の中に「ng-app」をモジュール名付きで設定します。例えば以下の様にします。
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;&amp;lt;body ng-app=&quot;HogeModuleName&quot;&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
このモジュール設定の辺りはよくわかって無いのですが、おそらく「ng-app」で設定した文字列がモジュール名になるようです。詳しいことはわからないので偉い方教えて下さい。m(_ _)m&lt;br/&gt;
続いてjs側でも設定します。
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
//AngularUIを読み込む？
var HogeModuleName = angular.module(&#39;HogeModuleName&#39;, [&#39;ui&#39;]);
//読み込んだAngularUIの初期設定？
HogeModuleName.value(&#39;ui.config&#39;, {
   select2: {    //AngularUIのUIの1つ「select2」の設定の模様。今回使用してないので要らない
      allowClear: true
   }
});

....
//何かAngularJSの処理
....

&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
これで設定はOKです。
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;いざ！使ってみる。&lt;/h4&gt;
&lt;p&gt;
Datepickerを表示したい箇所に以下を記述します。
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;&amp;lt;input ng-model=&quot;date&quot;
ui-date=&quot;{ dateFormat: &#39;yy-mm-dd&#39; }&quot;
ng-change=&quot;hogeChange()&quot;&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
すると、インプット要素が表示されてカーソルが移るとカレンダーが表示されるはずです。&lt;br/&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSkv6Kc7YSmR_z9gq5ui2F2rIxLEUVm9xDfd0r-l4TH2FphIY9cGmn_IBUrQ2GBGN1PZjIIPqyt1IKLCyO2QkKAaLMoEZks909-DiOh1oRVISwqzzUaQFuCLR8Xxkmnk719GgHRSijZ0/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-02+0.25.36.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSkv6Kc7YSmR_z9gq5ui2F2rIxLEUVm9xDfd0r-l4TH2FphIY9cGmn_IBUrQ2GBGN1PZjIIPqyt1IKLCyO2QkKAaLMoEZks909-DiOh1oRVISwqzzUaQFuCLR8Xxkmnk719GgHRSijZ0/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-02+0.25.36.png&quot; /&gt;&lt;/a&gt;&lt;br/&gt;
見た感じ、カレンダー自体はjQueryUIのものを使用してるみたいですね。以上早く英語を勉強しなきゃと焦っているbusyoumono99がお送りしました。何かのお役に立てたらうれしいです。
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;参考にしたサイト&lt;/h4&gt;
&lt;p&gt;
 &lt;a href=&quot;http://angular-ui.github.com/&quot;&gt;AngulaUI&lt;/a&gt;←のGetting StartedとDateの部分&lt;br/&gt;
 &lt;a href=&quot;http://stackoverflow.com/questions/12822862/getting-angular-ui-to-work&quot;&gt;StackOverflow - Getting Angular UI to work&lt;/a&gt;
&lt;/p&gt;


&lt;h4&gt;環境とか&lt;/h4&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JSフレームワーク&lt;/td&gt;&lt;td&gt;AngularJS 1.0.4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;SublimeText 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description><link>http://fusyomono1.blogspot.com/2013/04/angularuidatepicker.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSkv6Kc7YSmR_z9gq5ui2F2rIxLEUVm9xDfd0r-l4TH2FphIY9cGmn_IBUrQ2GBGN1PZjIIPqyt1IKLCyO2QkKAaLMoEZks909-DiOh1oRVISwqzzUaQFuCLR8Xxkmnk719GgHRSijZ0/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-04-02+0.25.36.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-6529712179461345148</guid><pubDate>Wed, 27 Mar 2013 16:44:00 +0000</pubDate><atom:updated>2013-05-15T09:46:12.483+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">SublimeText2</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title></title><description>&lt;h3&gt;Sublime Text2 使い方まとめ&lt;/h3&gt;
&lt;br&gt;
&lt;h4&gt;Sublime Text2を使い始めました&lt;/h4&gt;
&lt;p&gt;ちょっと前から流行ってるらしい、噂の恋に落ちるテキストエディタSublime Text2を使い始めました。今までEclipseを使っていたのですが、すぐにSublimeText2に乗り換えをきめました。&lt;br/&gt;軽い、最初はある程度の機能で好みにカスタマイズできる、オシャレと私の心を鷲掴されました。&lt;br/&gt;
以下は自分の忘備録を兼ねての記事です。下のリンクの内容を更にまとめたといった感じです。&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;画面構成&lt;/h4&gt;
 &lt;dl&gt;
  &lt;dt&gt;画面下に&lt;/dt&gt;
  &lt;dd&gt;LineとColumn &lt;br&gt;
  Tabのサイズ &lt;br&gt;
  ソースコードのカラーリング&lt;/dd&gt;
  &lt;dt&gt;画面右に&lt;/dt&gt;
  &lt;dd&gt;ミニマップ&lt;/dd&gt;
  &lt;dt&gt;画面左に&lt;/dt&gt;
  &lt;dd&gt;サイドバー、(表示・非表示の切り替えcmd + k,cmd + b)&lt;/dd&gt;
 &lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;各種設定&lt;/h4&gt;
 &lt;dl&gt;
  &lt;dt&gt;設定変更方法&lt;/dt&gt;
  &lt;dd&gt;Preferencesで変更していく。
   &lt;ul&gt;
    &lt;li&gt;FontとColor Schemeは直接変更。&lt;/li&gt;
    &lt;li&gt;それ以外はDefaultの中身を参考にしてUserのJSONのファイルを書き換える。&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/dd&gt;
  &lt;dt&gt;Settings設定変更内容&lt;/dt&gt;
  &lt;dd&gt;
   &lt;div class=&quot;code-container&quot;&gt;
    &lt;pre&gt;&quot;font_size&quot;: 14,  //フォントサイズ
ignored_packages  //Viの設定のON・OFF
&quot;highlight_modified_tabs&quot;: true, //編集が行われたファイルのタブをオレンジ色にする
&quot;scroll_past_end&quot;: true//最後の行を超えてスクロール出来る
&quot;draw_white_space&quot;: &quot;all&quot;//空白文字を表示
&quot;line_padding_top&quot;: 5,//行間
&quot;tab_size&quot;: 4,//タブサイズ
&quot;trim_trailing_white_space_on_save&quot;: true,//空白の削除
&quot;highlight_line&quot;:true,//現在の選択行をハイライト表示(お好みで)
&quot;word_wrap&quot;: true//自動改行
&quot;theme&quot;: &quot;Soda Dark.sublime-theme&quot;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;/dd&gt;
  &lt;dt&gt;Key Bindings設定内容&lt;/dt&gt;
  &lt;dd&gt;
   &lt;ul&gt;
    &lt;li&gt;キーの内容
     &lt;ul&gt;
      &lt;li&gt;Super = cmdキー&lt;/li&gt;
      &lt;li&gt;ctrl = controlキー&lt;/li&gt;
      &lt;li&gt;alt = Altキー&lt;/li&gt;
     &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;設定内容
     &lt;ul&gt;
      &lt;li&gt;
       &lt;div class=&quot;code-container&quot;&gt;
        &lt;pre&gt;{ &quot;keys&quot;: [&quot;ctrl+s&quot;], &quot;command&quot;: &quot;toggle_side_bar&quot; }  //サイドバーの表示・非表示&lt;/pre&gt;
       &lt;/div&gt;
      &lt;/li&gt;
     &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
  &lt;/dd&gt;
 &lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;編集補助&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;保存した拡張子でエディットモードが変わる。タグ、関数、クラス名等の補完が有効になる。&lt;/dt&gt;
 &lt;dt&gt;コメントの切り替え。cmd + /&lt;/dt&gt;
 &lt;dt&gt;htmlの場合は右クリックで「Open in Browser」でブラウザが開く。&lt;/dt&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;マルチカーソル&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;cmd + マウスドラッグ&lt;/dt&gt;
 &lt;dt&gt;cmd + d / cmd + u&lt;/dt&gt;
 &lt;dt&gt;cmd + ctrl + g&lt;/dt&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;コマンドパレット&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;ショートカット&lt;/dt&gt;
 &lt;dd&gt;cmd + Shift + p&lt;/dd&gt;
 &lt;dt&gt;使用例：内容の色付け&lt;/dt&gt;
 &lt;dd&gt;Syntax : 言語名&lt;/dd&gt;
&lt;/dl&gt;
&lt;br/&gt;
&lt;h4&gt;Hotsave&lt;/h4&gt;
&lt;dl&gt;
 &lt;dd&gt;ファイルを編集した状態でアプリを終了しても、保存無しで終了する。次開いた時は編集状態が残ったまま(終了時の状態のまま)始まる。&lt;/dd&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;Goto Anything (複数ファイルの検索機能)&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;ショートカット&lt;/dt&gt;
 &lt;dd&gt;cmd + p&lt;/dd&gt;
 &lt;dt&gt;ファイル名以外の記述&lt;/dt&gt;
 &lt;dd&gt;&lt;div class=&quot;code-container&quot;&gt;
   &lt;pre&gt;:　行番号
@　シンボル(関数名、クラス名とか)
#　文字検索&lt;/pre&gt;
  &lt;/div&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;プロジェクの管理&lt;/h4&gt;
 &lt;dl&gt;
  &lt;dt&gt;プロジェクト無しでも問題ない。ファイル単体でも開く。&lt;/dt&gt;
  &lt;dt&gt;プロジェクの作成&lt;/dt&gt;
  &lt;dd&gt;Project &gt; Save Project As...&lt;/dd&gt;
  &lt;dt&gt;プロジェクの編集&lt;/dt&gt;
  &lt;dd&gt;Project &gt; Edit Project
   &lt;dl&gt;
    &lt;dt&gt;フォルダの指定&lt;/dt&gt;
    &lt;dd&gt;path //作業フォルダを指定するとそれ以外は見ないようになる。複数のパスを指定できる。&lt;/dd&gt;
    &lt;dt&gt;拡張子の指定&lt;/dt&gt;
    &lt;dd&gt;&quot;file_exclude_patterns&quot; : [&quot;*.php&quot;]  //phpファイルは除く設定&lt;/dd&gt;
   &lt;/dl&gt;
  &lt;/dd&gt;
 &lt;/dl&gt;
&lt;br&gt;

&lt;h4&gt;スニペット&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;使い方&lt;/dt&gt;
 &lt;dd&gt;コマンドパレットで[Snippet]で検索。&lt;br&gt;もしくはスニペットトグルを記述して[Ctrl] + [space]&lt;/dd&gt;
 &lt;dt&gt;登録&lt;/dt&gt;
 &lt;dd&gt;Tools &gt; New Snippet
  &lt;dl&gt;
   &lt;dt&gt;
    &lt;div class=&quot;code-container&quot;&gt;
     &lt;pre&gt;&amp;lt;tabTrigger&amp;gt;hello&amp;lt;/tabTrigger&amp;gt;//トリガー。実行するスニペットの名前みたいなもの。例だと「hello」
&amp;lt;content&amp;gt;&amp;lt;![CDATA[
hogehoge;
]]&amp;gt;&amp;lt;/content&amp;gt; //スニペットの内容。hogehogeの部分が実際に実行される。&lt;/pre&gt;
    &lt;/div&gt;
   &lt;/dt&gt;
  &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;dt&gt;例PHPコード&lt;/dt&gt;
 &lt;dd&gt;echo &quot;Hi, ${1:Tom}&quot;; //${1:Tom}カーソルの位置、数字はカーソル移動順序、コロン以降はデフォルト値&lt;/dd&gt;
 &lt;dt&gt;保存場所&lt;/dt&gt;
 &lt;dd&gt;言語名のディレクトリ(無い場合は作成する) &lt;br&gt;
 保存名。トリガー名.sublime-snippet。例　hello.sublime-snippet&lt;/dd&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;Build機能&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;作成&lt;/dt&gt;
 &lt;dd&gt;Tools &gt; Build System &gt; New Build System...
  &lt;dl&gt;
   &lt;dt&gt;内容例&lt;/dt&gt;
   &lt;dd&gt;&quot;cmd&quot;: [&quot;php&quot;, &quot;$file&quot;]  //$fileが現在のファイルの意味&lt;/dd&gt;
   &lt;dt&gt;保存&lt;/dt&gt;
   &lt;dd&gt;buildsディレクトリを作成してその中に保存。通常言語名で保存&lt;/dd&gt;
  &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;dt&gt;選択&lt;/dt&gt;
 &lt;dd&gt;Tools &gt; Build System &gt; 言語&lt;/dd&gt;
 &lt;dt&gt;実行&lt;/dt&gt;
 &lt;dd&gt;Tools &gt; Build // cmd + b&lt;br/&gt;
  下にコンソールが開いて実行結果が表示される&lt;/dd&gt;
&lt;/dl&gt;
&lt;br/&gt;
&lt;h4&gt;パッケージの導入&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;Package Control&lt;/dt&gt;
 &lt;dd&gt;パッケージを簡単にインストールしてくれるパッケージ &lt;br&gt;
  http://wbond.net/sublime_packages/package_control/installation　でインストールコマンドをコピー &lt;br&gt;
  View &gt; Console　でコンソールを表示する。 &lt;br&gt;
  コンソールにペースト。Enterで実行。Sublime Textを再起動する。&lt;/dd&gt;
 &lt;dt&gt;他のパッケージの導入&lt;/dt&gt;
 &lt;dd&gt;コマンドパレットを開く。install Packegeを選択して実行。&lt;br&gt;
  パッケージのリストがあるので名前を入力して検索。該当パッケージを選択して実行。&lt;br&gt;
  少し待つ。successfully loadedが表示されたら成功。&lt;/dd&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;導入したパッケージ&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;Emmet&lt;/dt&gt;
 &lt;dd&gt;zencodingの次世代バージョン。html関係のコーディングが早くなる。&lt;/dd&gt;
 &lt;dt&gt;AngularJS Attributes Completion&lt;/dt&gt;
 &lt;dd&gt;AngularJSの属性を自動補完してくれる。&lt;/dd&gt;
 &lt;dt&gt;Bracket Highlight&lt;/dt&gt;
 &lt;dd&gt;htmlのタグ、jsの括弧のペアをハイライトしてくれる&lt;/dd&gt;
 &lt;dt&gt;Side Bar Enhancements&lt;/dt&gt;
 &lt;dd&gt;サイドバー右クリックのメニューを拡張するパッケージ。&lt;br/&gt;
   ブラウザを開いて確認などのよく利用するコマンドがある。&lt;/dd&gt;
 &lt;dt&gt;TrailingSpaces&lt;/dt&gt;
 &lt;dd&gt;行末の余分なスペースをハイライトする。&lt;/dd&gt;
 &lt;dt&gt;SublimeCodeIntel&lt;/dt&gt;
 &lt;dd&gt;関数・変数が定義されているところにジャンプする&lt;/dd&gt;
 &lt;dt&gt;abacus&lt;/dt&gt;
 &lt;dd&gt;イコールとかコロンとかを綺麗に揃える。&lt;br/&gt;
   ショートカット:cmd + option + ctrl + ]&lt;/dd&gt;
 &lt;dt&gt;AutoFileNameimg&lt;/dt&gt;
 &lt;dd&gt;タグやcssなどで、パスを入力する時に、ファイル名を補完する&lt;/dd&gt;
 &lt;dt&gt;SublimeLinter&lt;/dt&gt;
 &lt;dd&gt;HTML,CSS,PHP,JS等々のリアルタイム文法チェックをする&lt;/dd&gt;
 &lt;dt&gt;All Autocomplete&lt;/dt&gt;
 &lt;dd&gt;標準の自動補完（オートコンプリート）機能を強化し、マッチする文字列があればサジェストする。&lt;/dd&gt;
 &lt;dt&gt;CakePHP(Native)&lt;/dt&gt;
 &lt;dd&gt;CakePHPのスニペットおよびオートコンプリート集&lt;/dd&gt;
 &lt;dt&gt;ConvertToUTF8&lt;/dt&gt;
 &lt;dd&gt;文字エンコードのShiftJIS等をUTF8に変換する&lt;/dd&gt;
 &lt;dt&gt;SublimeCodeIntel&lt;/dt&gt;
 &lt;dd&gt;多くの言語に対応した自動補完やジャンプ機能を利用可能にする&lt;/dd&gt;
 &lt;dt&gt;Theme-Soda&lt;/dt&gt;
 &lt;dd&gt;カラースキーマのオシャレなテーマ&lt;/dd&gt;
 &lt;dt&gt;Twitter Bootstrap Snippets&lt;/dt&gt;
 &lt;dd&gt;Twiiter Bootstrapのスニペット&lt;/dd&gt;
&lt;/dl&gt;
&lt;br/&gt;
&lt;h4&gt;ウィンドウの分割と操作&lt;/h4&gt;
&lt;dl&gt;
 &lt;dt&gt;分割&lt;/dt&gt;
 &lt;dd&gt;cmd  + Option + n  //左右でn個に分割。元に戻すにはnを1にする。&lt;br&gt;
  cmd  + Option + Shift + n  //上下でn個に分割&lt;/dd&gt;
 &lt;dt&gt;分割ウィンドウへのカーソル移動&lt;/dt&gt;
 &lt;dd&gt;マウスクリック 又は&lt;br/&gt;
  cmd + n  //n個目のウィンドウに移動&lt;/dd&gt;
 &lt;dt&gt;分割ウィンドウへのファイル移動&lt;/dt&gt;
 &lt;dd&gt;マウスドラッグ 又は&lt;br/&gt;
  cmd + Shift + n  //n個目のウィンドウに移動&lt;/dd&gt;
&lt;/dl&gt;
&lt;br/&gt;
&lt;h4&gt;複数Mac間で設定共有&lt;/h4&gt;
&lt;p&gt;
 DropBoxを使用する。アカウントを取得しておく。
 &lt;ol&gt;
  &lt;li&gt;SublimeTextを終了。&lt;/li&gt;
  &lt;li&gt;DropBox内に[Sublime Text 2]ディレクトリを作成。&lt;/li&gt;
  &lt;li&gt;SubLime Text 2をインストールしたフォルダを開く
   &lt;dl&gt;
    &lt;dd&gt;デフォルトのインストール先は&lt;br&gt;
  “~/Library/Application\ Support/Sublime\ Text\ 2/&quot;&lt;/dd&gt;
   &lt;/dl&gt;
  &lt;/li&gt;
  &lt;li&gt;以下の3つのフォルダを先ほど作成した「Sublime Text 2」ディレクトリにコピーする
   &lt;dl&gt;
    &lt;dd&gt;&quot;Installed Packages&quot;&lt;/dd&gt;
    &lt;dd&gt;&quot;Packages&quot;&lt;/dd&gt;
    &lt;dd&gt;&quot;Pristine Packages&quot;&lt;/dd&gt;
   &lt;/dl&gt;
  &lt;/li&gt;
  &lt;li&gt;コピー元のディレクトリを削除またはリネームする&lt;/li&gt;
  &lt;li&gt;ターミナルを開き、以下のコマンドを実行する
    &lt;div class=&quot;code-container&quot;&gt;
     &lt;pre&gt;&quot;cd ~/Library/Application\ Support/Sublime\ Text\ 2/&quot;
&quot;ln -s ~/Dropbox/Sublime\ Text\ 2/Installed\ Packages ./Installed\ Packages&quot;
&quot;ln -s ~/Dropbox/Sublime\ Text\ 2/Packages ./Packages&quot;
&quot;ln -s ~/Dropbox/Sublime\ Text\ 2/Pristine\ Packages ./Pristine\ Packages&quot;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Sublime Text 2を開き、Dropbox内のディレクトリにリンクされていることを確認
   &lt;dl&gt;
    &lt;dd&gt;Sublime Text 2 &gt; Preferences &gt; Browse Packages… でDropbox内のPackagesディレクトリが開かれる&lt;/dd&gt;
   &lt;/dl&gt;
  &lt;/li&gt;
  &lt;li&gt;別MacにSublime Text 2をインストール。&lt;/li&gt;
  &lt;li&gt;一度起動して終了する。&lt;/li&gt;
  &lt;li&gt;“~/Library/Application\ Support/Sublime\ Text\ 2/&quot;内のディレクトリをリネームする。&lt;/li&gt;
  &lt;li&gt;ターミナルで「6」のコマンドを実行する。&lt;/li&gt;
  &lt;li&gt;またディレクトリがリンクされている事を確認&lt;/li&gt;
 &lt;/ol&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;google日本語入力との兼ね合い&lt;/h4&gt;
&lt;p&gt;
様々なプラグインとgoogle日本語入力で動作の不具合が発生するので対処する。
&lt;/p&gt;
&lt;dl&gt;
 &lt;dt&gt;Kye Bindings Defaultの以下「tab」キー関連をコメントアウト&lt;/dt&gt;
 &lt;dd&gt;
  &lt;div class=&quot;code-container&quot;&gt;
   &lt;pre&gt;
// { &quot;keys&quot;: [&quot;tab&quot;], &quot;command&quot;: &quot;insert_best_completion&quot;, &quot;args&quot;: {&quot;default&quot;: &quot;\t&quot;, &quot;exact&quot;: true} },
// { &quot;keys&quot;: [&quot;tab&quot;], &quot;command&quot;: &quot;insert_best_completion&quot;, &quot;args&quot;: {&quot;default&quot;: &quot;\t&quot;, &quot;exact&quot;: false},
//  &quot;context&quot;:
//  [
//   { &quot;key&quot;: &quot;setting.tab_completion&quot;, &quot;operator&quot;: &quot;equal&quot;, &quot;operand&quot;: true }
//  ]
// },
   &lt;/pre&gt;
  &lt;/div&gt;
 但しスニペットを「tab」キーをで実行できなくなる。スニペットは「ctrl + space」かコマンドパレットで実行。&lt;/dd&gt;
 &lt;dt&gt;Emmetプラグインが「tab」キーをおかしくする件。&lt;/dt&gt;
 &lt;dd&gt;以下をuser settingsに追加する。
  &lt;div class=&quot;code-container&quot;&gt;
   &lt;pre&gt;{
  // tabでの展開の上書きしない for Emmet
  &quot;disable_tab_abbreviations&quot;: true,
  // 改行でのフォーマットをしない(日本語変換の確定のため) for Emmet
  &quot;disable_formatted_linebreak&quot;: true
}
   &lt;/pre&gt;
  &lt;/div&gt;
 &lt;/dd&gt;
 &lt;dt&gt;全角文字が半角2文字と同じ幅にならない。&lt;/dt&gt;
 &lt;dd&gt;フォントにRictyを使い、フォントサイズを偶数にする。
  &lt;div class=&quot;code-container&quot;&gt;
   &lt;pre&gt;
&quot;font_face&quot;: &quot;Ricty&quot;,
&quot;font_size&quot;: 14,
   &lt;/pre&gt;
  &lt;/div&gt;
 &lt;/dd&gt;
 &lt;dt&gt;日本語入力中にタブキーを押すと、候補選択にならず、タブ入力になってしまう。&lt;/dt&gt;
 &lt;dd&gt;次のDefaultキーバインド設定をコメントアウト
  &lt;div class=&quot;code-container&quot;&gt;
   &lt;pre&gt;
// { &quot;keys&quot;: [&quot;tab&quot;], &quot;command&quot;: &quot;insert_best_completion&quot;, &quot;args&quot;: {&quot;default&quot;: &quot;\t&quot;, &quot;exact&quot;: true} },
// { &quot;keys&quot;: [&quot;tab&quot;], &quot;command&quot;: &quot;insert_best_completion&quot;, &quot;args&quot;: {&quot;default&quot;: &quot;\t&quot;, &quot;exact&quot;: false},
//   &quot;context&quot;:
//     [
//       { &quot;key&quot;: &quot;setting.tab_completion&quot;, &quot;operator&quot;: &quot;equal&quot;, &quot;operand&quot;: true }
//     ]
// },
   &lt;/pre&gt;
  &lt;/div&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;h4&gt;プラグインのアンインストール&lt;/h4&gt;
&lt;ul&gt;
 &lt;li&gt;コマンドパレット表示&lt;/li&gt;
 &lt;li&gt;「package remove」で検索&lt;/li&gt;
 &lt;li&gt;インストールされたプラグインが一覧になっているので該当プラグインを選択。&lt;/li&gt;
 &lt;li&gt;少々待って終了。&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h4&gt;チートシート&lt;/h4&gt;
&lt;a href=&quot;http://dev.classmethod.jp/tool/sublimetext-cheatsheet/&quot;&gt;クラスメソッド株式会社様 開発ブログ&lt;/a&gt;
&lt;br/&gt;
&lt;br&gt;
&lt;h4&gt;参考にしたサイト&lt;/h4&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://dotinstall.com/lessons/basic_sublimetext&quot;&gt;Sublime Text 2入門 (全14回) - ドットインストール&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://liginc.co.jp/designer/archives/6774&quot;&gt;”恋に落ちるエディタ”「Sublime Text」 完全入門ガイド！&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://mnemoniqs.com/web/sublimetext2/&quot;&gt;Sublime Text 2ってエディタがすごくイイ。Dreamweaverから乗り換えた時の初期設定とか使い方とかをメモ&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://roguer.info/2012/11/01/6049/&quot;&gt;[MAC][WIN]SUBLIME TEXT のススメと最初にすべき日本語入力環境の改善&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://bitarts.jp/blog/archives/004153.html&quot;&gt;エディタ乗り換えてみるテスト（Sublime Text 2）&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://koizuss.hatenablog.com/entry/2013/01/14/112350&quot;&gt;Sublime Text 2 Docblockr Pluginとgoogle日本語入力を使っていてENTERを押したら入力内容が消える問題を解消 - hounobouno&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://nishiaki.probo.jp/2012/10/sublime-text-2.html&quot;&gt;Sublime Text 2 の日本語入力問題 | Nishiaki&#39;s Log&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://webkikaku.co.jp/staff/software/sublime-text-2-uninstall/&quot;&gt;Sublime Text 2にインストールしたプラグイン（パッケージ）をアンインストールする方法 | 株式会社WEB企画スタッフブログ&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://d.hatena.ne.jp/kaz_shu/20120718/1342623780&quot;&gt;日本語入力でタブを使えるようにする - kaz_shuの日記&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://dev.classmethod.jp/tool/html-corder-sublime-text-2-customize/&quot;&gt;【追記】【寄せあつめ】今さらだけどSublime Text 2の基本とカスタマイズ【&amp;Vim化】【4日目】 ｜ Developers.IO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;以下追記&lt;/h4&gt;
&lt;p&gt;自分でもチートシート作ってみました。
&lt;a href=&quot;http://fusyomono1.blogspot.jp/2013/05/sublime-text.html&quot;&gt;Sublime Textのチートシートを作ってみた&lt;/a&gt;&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2013/03/sublime-text2-sublime-text2-sublime.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-5860926914468768491</guid><pubDate>Sat, 23 Mar 2013 15:48:00 +0000</pubDate><atom:updated>2015-02-12T13:37:56.412+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><title>AngularJSで連動するSELECTタグを作る</title><description>&lt;h4&gt;連動するSELECTタグ&lt;/h4&gt;
&lt;h5&gt;2015/02/12追記&lt;/h5&gt;
&lt;p&gt;
hrfmmymtさんが&lt;a href=&quot;http://qiita.com/hrfmmymt/items/af79e5e3ffacac3765e5&quot;&gt;filter使ったより良い方法を記事にしてくれました。&lt;/a&gt;&lt;br /&gt;
hrfmmymtさんのやり方の方が良いので合わせて読んで下さい。&lt;br /&gt;
追記ここまで。
&lt;/p&gt;
&lt;h5&gt;作るもの&lt;/h5&gt;
&lt;p&gt;
今回はCakePHPはお休みして、主にAngularJSメインで試してみます。&lt;br/&gt;作るものは一つ目SELECTタグを選択したら、その内容に応じて二つ目のSELECTタグのOPTIONが変化するサンプルです。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;そしてサンプルです&lt;/h5&gt;
&lt;p&gt;
jsFiddleにサンプル作ったので、&lt;a href=&quot;http://jsfiddle.net/busyoumono99/Szkxe/&quot;&gt;こちらを&lt;/a&gt;確認して下さい。&lt;br/&gt;
まずhtmlの中身の解説をすると、
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
&amp;lt;h1&amp;gt;AngularJSの練習&amp;lt;/h1&amp;gt;
 &amp;lt;div ng-app&amp;gt;  &lt;-ここでアプリの宣言
    &amp;lt;div ng-controller=&quot;mainCtrl&quot;&amp;gt;
    &amp;lt;form novalidate name=&quot;myForm&quot; &amp;gt;
    &amp;lt;p&amp;gt;Group:
    &amp;lt;select ng-model=&quot;group&quot;  &lt;-設定されるモデルは”group&quot;
             ng-options=&quot;g.name for g in groups&quot;  &lt;-optionをgroupsモデルからループ処理で作成。
             ng-change=&quot;change()&quot;&amp;gt;  &lt;-内容に変更があったらchange()メソッドを実行
        &amp;lt;option value=&quot;&quot;&amp;gt;-- chose group --&amp;lt;/option&amp;gt;  &lt;-一番上に来る空のオプションを設定
    &amp;lt;/select&amp;gt;
    &amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;User:
    &amp;lt;select ng-model=&quot;user&quot;  &lt;-設定されるモデルは”user&quot;
           ng-options=&quot;u.name for u in listUsers&quot;&amp;gt; &lt;-optionをlistUsersモデルからループ処理で作成。
        &amp;lt;option value=&quot;&quot;&amp;gt;-- chose user --&amp;lt;/option&amp;gt; &lt;-一番上に来る空のオプションを設定
    &amp;lt;/select&amp;gt;
    &amp;lt;/p&amp;gt;
    &amp;lt;/form&amp;gt;
    &amp;lt;pre&amp;gt;グループ名 : {{group.name}}&amp;lt;/pre&amp;gt;  &lt;-グループ名の表示
    &amp;lt;pre&amp;gt;ユーザー名 : {{user.name}}&amp;lt;/pre&amp;gt;  &lt;-ユーザー名の表示
     &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
といった内容になってます。&lt;br/&gt;
続いてJS側は
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
    //以下はそれぞれモデルでデータを格納してます。
    $scope.groups
    $scope.group 
    $scope.users 
    $scope.listUsers
    $scope.user
    //以下はメソッドで、一つ目のセレクトタグに変更があった場合に実行されます。
    $scope.change = function(){
        $scope.listUsers = [];
        for(var i=0;i&lt;$scope.users.length;i++){
            //選択されたグループのidと一致しているユーザーを配列に追加していく
            if($scope.users[i].group_id ==$scope.group.id){
                 $scope.listUsers.push($scope.users[i]);  
            }
        }
    };
&lt;/pre&gt;
&lt;/div&gt;
といった感じです。最初change()メソッドではなく、html側で
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
&amp;lt;select ng-model=&quot;user&quot; ng-options=&quot;u.name for u in listUsers | filtter:ホニャララ&quot;&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
みたいな感じで作れると思ったのですが、どうにもこうにも上手くいきませんでした。もし「出来るよ〜」って方がいらしゃったら是非ご指導下さいm(__)m。&lt;br/&gt;
ともかく、jQueryと比べてコードは少ないし、見やすいしで良かった良かった。ではでは。
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2013/03/angularjsselect.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-4774467724039507649</guid><pubDate>Fri, 22 Mar 2013 13:43:00 +0000</pubDate><atom:updated>2013-03-22T22:47:31.378+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>CakePHPとAngularJSでWebアプリを作る。その4</title><description>&lt;h4&gt;サーバー側の修正&lt;/h4&gt;
&lt;h5&gt;JSONPってなんだっけ&lt;/h5&gt;
&lt;p&gt;
その3からの続きです。&lt;br/&gt;
原因不明で途方に暮れるましたが、ふとAngularJSの
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt; $http.jsonp(url).success(function(data,status) {&lt;/pre&gt;
&lt;/div&gt;
って部分に注目。「JSON」じゃなくて「JSONP」ってなんだっけ？と思いググる。&lt;br/&gt;
&lt;a href=&quot;http://d.hatena.ne.jp/keyword/JSONP&quot;&gt;はてなキーワード:JSONP&lt;/a&gt;を読む。フムフム。以下一部を引用。
&lt;blockquote&gt;
&lt;p&gt;…JSONP用のAPIでは、関数名＋取得データをjson形式で表記して引数とした形式(例.callbackFunc({id:1000,name:aaa}))のレスポンスが一般的で、…&lt;/p&gt;
&lt;/blockquote&gt;
ん？
&lt;blockquote&gt;
例.callbackFunc
&lt;/blockquote&gt;
！！！ああ、そうでした。以前業務の案件の最中にピュアPHPで「$_GET[&#39;callback&#39;]」とか、そんな感じのヤツを先頭につけた記憶が蘇って来ました。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;リクエストを調べる&lt;/h5&gt;
&lt;p&gt;
こんな時のためにCakePHP側でログを書き出しておきました。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
// リクエストをデバッグログに書き出し
  $this-&gt;ApiTool-&gt;logingRequest($this-&gt;request);
&lt;/pre&gt;
&lt;/div&gt;
/app/controller/HogeUsersController.phpの上記の部分です。&lt;br/&gt;
サーバー側でリクエストを受け付けた時に、何かしら値を受け取ってるかもと思い、以下のログファイルを開く。&lt;br/&gt;
/app/tmp/logs/debug.log
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;2013-03-22 13:51:06 Debug: Array
(
    [callback] =&gt; angular.callbacks._0
)&lt;/pre&gt;
&lt;/div&gt;
ありましたねぇ。この時テンションMAX↑↑↑。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;JsonView.phpの修正して確認&lt;/h5&gt;
&lt;p&gt;
JsonView.phpの括弧をつけた部分を以下のように修正します。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
 $content = &#39;(&#39;.json_encode($data).&#39;)&#39;;
 if (!empty($this-&gt;request-&gt;query[&#39;callback&#39;])){
  $content = $this-&gt;request-&gt;query[&#39;callback&#39;] . $content;
 }
&lt;/pre&gt;
&lt;/div&gt;
ブラウザのコンソールを確認してみる。&lt;br/&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRmsNpNXUOuIEz36rPK0U8zSy4AO-262A1cfg3VDFVL0Okw7NvGCmGu6KHR1xPAvDcgmcL4ZVszt1fUmeK2sNeJZoGOkWZy5ZfESnQ1m8k0mxbSEkoieEyCxnaywUg00JG7AjgWso9jUk/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+22.38.35.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRmsNpNXUOuIEz36rPK0U8zSy4AO-262A1cfg3VDFVL0Okw7NvGCmGu6KHR1xPAvDcgmcL4ZVszt1fUmeK2sNeJZoGOkWZy5ZfESnQ1m8k0mxbSEkoieEyCxnaywUg00JG7AjgWso9jUk/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+22.38.35.png&quot; /&gt;&lt;/a&gt;&lt;br/&gt;
ちゃんと取得出来てるようです。良かった良かった。&lt;br/&gt;&lt;br/&gt;
とりあえず今回はここまでです。ではでは。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;



































</description><link>http://fusyomono1.blogspot.com/2013/03/cakephpangularjsweb4.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRmsNpNXUOuIEz36rPK0U8zSy4AO-262A1cfg3VDFVL0Okw7NvGCmGu6KHR1xPAvDcgmcL4ZVszt1fUmeK2sNeJZoGOkWZy5ZfESnQ1m8k0mxbSEkoieEyCxnaywUg00JG7AjgWso9jUk/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+22.38.35.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-1411386249599268687</guid><pubDate>Thu, 21 Mar 2013 16:34:00 +0000</pubDate><atom:updated>2013-03-22T01:41:58.178+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>CakePHPとAngularJSでWebアプリを作る。その3</title><description>&lt;h4&gt;AngularJS側のページを作る。&lt;/h4&gt;
&lt;h5&gt;コントローラを作成&lt;/h5&gt;
&lt;p&gt;
JSON側はできた（と思っていた）のでAngularJSのアプリページを作っていきます。まずはコントローラです。&lt;br/&gt;
/app/Controller/AngularjsController.phpを作成します。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
App::uses(&#39;AppController&#39;, &#39;Controller&#39;);

class AngularjsController extends AppController {
 …
 public $layout = &quot;angularjs&quot;;

 public function index() {
  
 }
 
 // jsonを取得するページ。
 public function json_get_test(){
  
 }
 
 public function beforeFilter() {
  parent::beforeFilter();
  $this-&gt;set(&#39;title_for_layout&#39;,&#39;AngularJS test&#39;);
 }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;/p&gt;
&lt;h5&gt;ビューを作成&lt;/h5&gt;
レイアウトもAngularJS用のレイアウトを用意します。&lt;br/&gt;
/app/View/Layouts/angularjs.ctp
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ja&quot; ng-app&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;?php echo $this-&amp;gt;Html-&amp;gt;charset(); ?&amp;gt;
 &amp;lt;title&amp;gt;Test Site&amp;lt;?php echo $title_for_layout; ?&amp;gt;&amp;lt;/title&amp;gt;
 &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
  &amp;lt;?php
  echo $this-&amp;gt;Html-&amp;gt;meta(&#39;icon&#39;) . &quot;\n&quot;;
  echo $this-&amp;gt;Html-&amp;gt;css(array(&#39;bootstrap.min&#39;,&#39;bootstrap-responsive&#39;)) . &quot;\n&quot;;
  echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js&#39;) . &quot;\n&quot;;
  echo $this-&amp;gt;fetch(&#39;meta&#39;) . &quot;\n&quot;;
  echo $this-&amp;gt;fetch(&#39;css&#39;) . &quot;\n&quot;;
  echo $this-&amp;gt;fetch(&#39;script&#39;) . &quot;\n&quot;;
 ?&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 &amp;lt;div class=&quot;container-fluid&quot;&amp;gt;
  &amp;lt;div class=&quot;row-fluid&quot;&amp;gt;
   &amp;lt;div class=&quot;span3&quot;&amp;gt;
    &amp;lt;?php echo $this-&amp;gt;fetch(&#39;sidebar&#39;); ?&amp;gt;
   &amp;lt;/div&amp;gt;&amp;lt;!--/span--&amp;gt;
   &amp;lt;div class=&quot;span9&quot;&amp;gt;
&amp;lt;?php echo $this-&amp;gt;fetch(&#39;content&#39;); ?&amp;gt;
   &amp;lt;/div&amp;gt;&amp;lt;!--/span--&amp;gt;
  &amp;lt;/div&amp;gt;&amp;lt;!--/row--&amp;gt;
  &amp;lt;hr&amp;gt;
 &amp;lt;/div&amp;gt;
&amp;lt;?php
 echo $this-&amp;gt;Html-&amp;gt;script(&#39;https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js&#39;) . &quot;\n&quot;;
 echo $this-&amp;gt;Html-&amp;gt;script(&#39;bootstrap&#39;) . &quot;\n&quot;;
?&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
htmlタグの所に「ng-app」、AngularJS用のjavascriptファイルの読み込みをすれば後は、まあご自由にどぞ。ちなみにCSSはTwitter Bootstrapを使ってます。CakePHP用のプラグインの方は使ってません。
&lt;/p&gt;
&lt;br/&gt;

&lt;h5&gt;&lt;/h5&gt;
&lt;p&gt;
ようやくお待たせしました。メインのAngularJS部分の記述を以下のビューファイルに書いてきます。
/app/View/Angularjs/json_get_test.ctp
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
&amp;lt;?php
$this-&amp;gt;start(&#39;sidebar&#39;);
echo $this-&amp;gt;element(&#39;angularjs_localnavi&#39;);
$this-&amp;gt;end();

$this-&amp;gt;start(&#39;script&#39;);
?&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;

var requestCtrl = function($scope, $http, $templateCache){
  //取得先のURL
  $scope.jsonUrl = &#39;no url&#39;;
  //JSONを取得する
  $scope.doGetUser = function(){
   var url = $scope.jsonUrl;
   console.log(url);
   $http.jsonp(url).success(function(data,status) {
    console.log(&#39;success&#39;);
    console.log(data);
    console.log(status);
    $scope.result = data;
   }).
   error(function(data, status) {
    console.log(&#39;error&#39;);
    console.log(data);
    console.log(status);
   });
  }
  //サンプル用のURLとYouTube用のURLのどちらかを設定する。
  $scope.setJsonURL = function(type){
   var url = null;
   if(type == 0){
    url = &#39; http://sample.com/api/hogeUsers/get/user_list?&#39;
    + [
     &#39;callback=JSON_CALLBACK&#39;
     ].join(&#39;&amp;&#39;);
   } else {
    url = &#39;https://gdata.youtube.com/feeds/api/videos?&#39;
     + [
      &#39;q=&#39; + &#39;ももクロ&#39;,
      &#39;alt=json&#39;,
      &#39;max-results=5&#39;,
      &#39;v=2&#39;,
      &#39;callback=JSON_CALLBACK&#39;
     ].join(&#39;&amp;&#39;);
   }
   $scope.jsonUrl = url;
  }
 }
&amp;lt;/script&amp;gt;
&amp;lt;?php $this-&amp;gt;end(); ?&amp;gt;
&amp;lt;div &amp;gt;
 &amp;lt;h3&amp;gt;AngularJSでJSON取得のテスト&amp;lt;/h3&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div ng-controller=&quot;requestCtrl&quot;&amp;gt;
 &amp;lt;form name=&quot;getTarget&quot;&amp;gt;
  &amp;lt;pre&amp;gt;$scope.jsonUrl : {{jsonUrl}}&amp;lt;/pre&amp;gt;
  &amp;lt;button ng-click=&quot;doGetUser()&quot;  class=&quot;btn btn-primary&quot;&amp;gt;ユーザーJSONデータ取得&amp;lt;/button&amp;gt;&amp;lt;br/&amp;gt;
  &amp;lt;br /&amp;gt;
  &amp;lt;button ng-click=&quot;setJsonURL(0)&quot; class=&quot;btn&quot;&amp;gt;HogeUser List&amp;lt;/button&amp;gt;
  &amp;lt;button ng-click=&quot;setJsonURL(1)&quot; class=&quot;btn&quot;&amp;gt;Youtube&amp;lt;/button&amp;gt;
 &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
これでブラウザ(クローム)のコンソールに取得したJSONオブジェクトが表示されるはず！「HogeUser List」ボタンを押してから「ユーザーJSONデータ取得」を押す！！
&lt;/p&gt;
&lt;br/&gt;
&lt;h4&gt;JSON側の修正へ&lt;/h4&gt;
&lt;h5&gt;そしてエラー&lt;/h5&gt;
&lt;p&gt;
無常にもコンソールにはエラーが出るorz。&lt;br/&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7F6fzo9m3QYgRujC9VXMPkI9Do884cVpominpZOAaS4NPwWSqICbOMdWLNG0X9_Oy8rNyEW8eS9qITmnAl6OChTRS8srofm4AR0V1Z3DbVZPUjfVeItHXPQ9VKO6t0cZ-1CCB94VOUgY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+1.37.46.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7F6fzo9m3QYgRujC9VXMPkI9Do884cVpominpZOAaS4NPwWSqICbOMdWLNG0X9_Oy8rNyEW8eS9qITmnAl6OChTRS8srofm4AR0V1Z3DbVZPUjfVeItHXPQ9VKO6t0cZ-1CCB94VOUgY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+1.37.46.png&quot; /&gt;&lt;/a&gt;&lt;br/&gt;
エラーの内容は
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;Uncaught SyntaxError: Unexpected token : &lt;/pre&gt;
&lt;/div&gt;
予期しないトークン「:」と出ている…。???、直接ブラウザで確認するもJSON形式に則っているように見える…。&lt;br/&gt;
ここからハマった。&lt;br/&gt;
それならブラウザをFireFoxに変えて試してみる。やっぱりエラー…。でもよく見ると
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;SyntaxError: invalid label&lt;/pre&gt;
&lt;/div&gt;
とエラーの内容が違う。&lt;br/&gt;
ここで昔Ajaxでやった時にJSONを「()」で囲む事を思い出す。なんか、この括弧で囲まないとエラーがでるんだっけ？
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;JsonView.phpをいじる&lt;/h5&gt;
&lt;p&gt;
HogeUsersControllerでJSON用のビューを設定してました。そのビューはどうやら「/lib/Cake/View/JsonView.php」の事らしい。Cakeディレクトリの中にあるので「/app/View/JsonView.php」にコピペして開いてみます。&lt;br/&gt;
中を確認すると
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
   $content = json_encode($data);
&lt;/pre&gt;
&lt;/div&gt;
という部分があったので、括弧で囲むように修正↓
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
   $content = &#39;(&#39;.json_encode($data).&#39;)&#39;;
&lt;/pre&gt;
&lt;/div&gt;
これで再び実行してみる。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;またエラー&lt;/h5&gt;
&lt;p&gt;
コンソールに表示された内容は
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;error
undefined
0 &lt;/pre&gt;
&lt;/div&gt;
と出る。「SyntaxError」は出なくなったが、JSONの取得後の「success」側の処理ではなく「error」側の処理を実行している模様。&lt;br/&gt;
そして途方に暮れる。&lt;br/&gt;腹立ちまぎれに続きは次回。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;






























</description><link>http://fusyomono1.blogspot.com/2013/03/cakephpangularjsweb3.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7F6fzo9m3QYgRujC9VXMPkI9Do884cVpominpZOAaS4NPwWSqICbOMdWLNG0X9_Oy8rNyEW8eS9qITmnAl6OChTRS8srofm4AR0V1Z3DbVZPUjfVeItHXPQ9VKO6t0cZ-1CCB94VOUgY/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-03-22+1.37.46.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-2501851350680906054</guid><pubDate>Thu, 21 Mar 2013 15:25:00 +0000</pubDate><atom:updated>2013-03-22T00:27:01.324+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>CakePHPとAngularJSでWebアプリを作る。その2</title><description>&lt;h4&gt;CakePHPでJSONを吐き出すページを作る。正規版&lt;/h4&gt;

&lt;h5&gt;前のは失敗でした&lt;/h5&gt;
&lt;p&gt;
その1で作ったJSON用のページは間違ってました。m(__)m申し訳ないです。以下はJSONを表示するページの作り直しです。&lt;br/&gt;
ちなみに今回のも完成ではありません。注意して下さい。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;表示するURLを決める&lt;/h5&gt;
&lt;p&gt;
CakePHPのお作法的にどういったURLが正しいか分かりませんが、以下の様にきめました。
&lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;http://sample.com/api/hogeUsers/get/user_list&lt;/pre&gt;
&lt;/div&gt;
「api」部分はプレフィックスです。core.phpに以下の部分のコメントアウトをとって「api」を追加しました。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
Configure::write(&#39;Routing.prefixes&#39;, array(&#39;admin&#39;,&#39;api&#39;));
&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;ルーターの設定&lt;/h5&gt;
&lt;p&gt;
CakePHP2.xではJSON用のビューを使うための設定が必要らしいです。
設定その1。/app/Config/routes.phpの最後に以下を追加します。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
Router::parseExtensions(&#39;json&#39;);
&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;コントローラの作成&lt;/h5&gt;
&lt;p&gt;
/app/controller/HogeUsersController.phpを作ります。
&lt;div class=&quot;code-container&quot;&gt;&lt;pre&gt;
App::uses(&#39;AppController&#39;, &#39;Controller&#39;);

class HogeUsersController extends AppController {
　　…
 public $layout = &quot;common&quot;;
 /**
  * コンポーネントの設定
  */
 public $components = array(&#39;ApiTool&#39;,&#39;RequestHandler&#39;);
 
 public function index() {
 }
 
 public function api_get($type = null){
  // リクエストをデバッグログに書き出し
  $this-&gt;ApiTool-&gt;logingRequest($this-&gt;request);
  // 引数チェック。空か、指定タイプ以外だったら404エラー
  $this-&gt;ApiTool-&gt;checkType($type,array(&#39;user_list&#39;));
  // タイプごとにmodelsを作り分ける。
  if ($type == &#39;user_list&#39;){
   $models = array(
     array(&#39;name&#39;=&gt;&#39;yamada&#39;,&#39;id&#39;=&gt;115),
     array(&#39;name&#39;=&gt;&#39;kitamura&#39;,&#39;id&#39;=&gt;116),
     array(&#39;name&#39;=&gt;&#39;matsumoto&#39;,&#39;id&#39;=&gt;117),
     );
   $this-&gt;set(&#39;models&#39;,$models);
  }
  // ビュークラスをJSONにする
  $this-&gt;viewClass = &#39;Json&#39;;
  $this-&gt;set(&#39;_serialize&#39;, array(&#39;models&#39;));
 }
 
 public function beforeFilter() {
  parent::beforeFilter();
  $this-&gt;set(&#39;title_for_layout&#39;,&#39;HogeUsers&#39;);
 } 
}
&lt;/pre&gt;&lt;/div&gt;
コンポーネントに「RequestHandler」を設定します。これはCakePHP2.xではJSON用のビューを使うための設定その2です。&lt;br/&gt;
自作したコンポーネント「ApiTool」も設定してます。&lt;br/&gt;
「api_get」アクションを作って中身を書いていきます。「$this-&gt;viewClass = &#39;Json&#39;;」の部分でJSON用のビューを設定しているようです。最後のシリアライズ「$this-&gt;set(&#39;_serialize&#39;, array(&#39;models&#39;));」も忘れないようにしましょう。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;自作コンポーネント「ApiTool」&lt;/h5&gt;
&lt;p&gt;
同じ処理を色々な箇所で書きそうだったのでコンポーネントを自作しました。
/app/Controller/Component/ApiToolComponent.php
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
App::uses(&#39;Component&#39;, &#39;Controller&#39;);


class ApiToolComponent extends Component {
 // リクエストの内容をログに書き出す。
 public function logingRequest($request = null){
  if (empty($request)) return;
  $this-&gt;log($request-&gt;params, &#39;debug&#39;);
  $this-&gt;log($request-&gt;data, &#39;debug&#39;);
  $this-&gt;log($request-&gt;query, &#39;debug&#39;);
 }
 
 // 引数チェック。空か、$types以外だったら404エラー
 public function checkType($type,$types=array()){
  if (empty($type) || empty($types)) throw new NotFoundException(&#39;このページはありません。&#39;);
  if (empty($type) || !in_array($type,$types)){
   throw new NotFoundException(&#39;このページはありません。&#39;);
  }
 }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;JSON用のページにアクセスしてみる&lt;/h5&gt;
&lt;p&gt;
これでJSONが吐出されるのでブラウザで「http://sample.com/api/hogeUsers/get/user_list」にアクセスしてみます。
以下が表示されました。
&lt;div class=&quot;code-container&quot;&gt;
&lt;pre&gt;
{&quot;models&quot;:[{&quot;name&quot;:&quot;yamada&quot;,&quot;id&quot;:115},{&quot;name&quot;:&quot;kitamura&quot;,&quot;id&quot;:116},{&quot;name&quot;:&quot;matsumoto&quot;,&quot;id&quot;:117}]}
&lt;/pre&gt;
&lt;/div&gt;
ブラウザ上で見る限りは、PHPの配列がJSON形式で表示されてます。&lt;br/&gt;
しかしこれでは上手く行きません。続きは次回です。
&lt;/p&gt;
&lt;br/&gt;
&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;






























</description><link>http://fusyomono1.blogspot.com/2013/03/cakephpangularjsweb2.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-2408004427729284400</guid><pubDate>Mon, 18 Mar 2013 15:46:00 +0000</pubDate><atom:updated>2013-03-22T00:26:47.546+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>CakePHPとAngularJSでWebアプリを作る。その１</title><description>&lt;h3&gt;m(__)m申し訳ないです。この記事は間違ってました。&lt;a href=&quot;http://fusyomono1.blogspot.jp/2013/03/cakephpangularjsweb2.html&quot;&gt;CakePHPとAngularJSでWebアプリを作る。その２&lt;/a&gt;に修正した内容を書いたのでそちらを読んで下さい。&lt;/h3&gt;
&lt;h4&gt;CakePHPでJSONを吐き出すページを作る&lt;/h4&gt;

&lt;h5&gt;前提&lt;/h5&gt;
&lt;p&gt;
ひと通り基本的なCakephpのサイトが出来てる前提で進めます。&lt;br/&gt;
データベースにUsersテーブルがあって、Userモデル、Usersコントローラは作ってあるとします。
&lt;/p&gt;
&lt;h5&gt;表示するURLを決める&lt;/h5&gt;
&lt;p&gt;
CakePHPのお作法的にどういったURLが正しいか分かりませんが、以下の様にきめました。
&lt;pre&gt;http://sample.com/api/users/get/list?id=123&lt;/pre&gt;
「api」部分はプレフィックスです。core.phpに以下の部分のコメントアウトをとって「api」を追加しました。
&lt;pre&gt;
Configure::write(&#39;Routing.prefixes&#39;, array(&#39;admin&#39;,&#39;api&#39;));
&lt;/pre&gt;
これで「UsersController」の「api_get」アクションに内容を書いていきます。
&lt;/p&gt;
&lt;h5&gt;JSONで吐き出すようにコントローラを作成&lt;/h5&gt;
&lt;p&gt;
UsersController.phpに以下を記述
&lt;pre&gt;
 public function api_get($type = null){
  // 引数チェック。空か、list、all以外だったら404エラー
  if (empty($type) || !in_array($type,array(&#39;list&#39;,&#39;all&#39;))){
   throw new NotFoundException(&#39;このページはありません。&#39;);
  }
  // タイプで処理を切り分け。そのままsetする。
  if ($type == &#39;list&#39;){
   $this-&gt;set(&#39;data&#39;,$this-&gt;User-&gt;find(&#39;list&#39;));
  }
  if ($type == &#39;all&#39;){
   $this-&gt;set(&#39;data&#39;,$this-&gt;User-&gt;find(&#39;all&#39;));
  }
  // URLのクエリをとる
  $id = $this-&gt;request-&gt;query[&#39;id&#39;]
  // 試しに適当にsetする。
  $this-&gt;set(&#39;test&#39;,&#39;hogehoge&#39;);
  // JSON形式で表示するように設定。
  $this-&gt;viewClass = &#39;Json&#39;;
  // シリアライズを実行する。
  $this-&gt;set(&#39;_serialize&#39;, array(&#39;data&#39;,&#39;test&#39;));
 }
&lt;/pre&gt;
で、ブラウザでアクセスするとJSON形式のデータが表示される。&lt;br/&gt;
おもむろに終わり
&lt;/p&gt;
&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CSSフレームワーク&lt;/td&gt;&lt;td&gt;Twitter bootstrap 2.2.2&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;iMac&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2013/03/cakephpangularjsweb_19.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-6658213602066122741</guid><pubDate>Mon, 18 Mar 2013 14:05:00 +0000</pubDate><atom:updated>2013-03-18T23:06:04.317+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AngularJS</category><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><title>CakePHPとAngularJSでWebアプリを作る</title><description>&lt;p&gt;
またまた放置してましたけど気にせずに再開したいと思います。
&lt;/p&gt;
&lt;h4&gt;CakePHPとAngularJSでWebアプリを作っていきます。&lt;/h4&gt;
&lt;h5&gt;AngularJSに惹かれたわけ&lt;/h5&gt;
&lt;p&gt;
ダイナミックにWebページを表示したくてjavascriptのフレームワークを探してたらAngularJSに出会いました。軽く解説している記事など読んでゾッコンになりました。&lt;br/&gt;
この感じはjQueryを初めて使った時に似ています。なんかスイスイ実装できる。作ってワクワクしていく感じです。&lt;br/&gt;
ですが、AngularJSを扱った記事がまだネット上に少ないです。&lt;br/&gt;英語も読めませんし。そんなことなら自分で作りながら記事にしてみようと思い立った訳であります。
&lt;/p&gt;

&lt;h5&gt;AngularJSの基礎的な事&lt;/h5&gt;
&lt;p&gt;基本的なことはドットインストール様のサイトで勉強しました。このサイトは無料で取っ掛かりの勉強するのに最適で良く利用してます。&lt;br/&gt;
&lt;a href=&quot;http://dotinstall.com/&quot;&gt;こちらです。&lt;/a&gt;&lt;br/&gt;
ここのレッスン一覧で「AngularJS 」タグがついてる4つを全部見ました。その内容の解説はしないので悪しからず。&lt;br/&gt;
&lt;/p&gt;

&lt;h5&gt;参考に読んだ記事&lt;/h5&gt;
&lt;p&gt;
&lt;a href=&quot;http://qiita.com/items/82aa9dde64826d25407d&quot;&gt;vvakame様の記事&lt;/a&gt;や&lt;br/&gt;
&lt;a href=&quot;http://nayuta-works.com/study_angularjs/#/&quot;&gt;TEA-NOMA様の記事&lt;/a&gt;(←すごい)や&lt;br/&gt;
&lt;a href=&quot;http://fumit.blogspot.jp/2013/01/angularjs-angularjs.html&quot;&gt;FumiYamazaki様の記事&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://qiita.com/items/6f36f9f9f4cbcd225566&quot;&gt;atusi様の記事&lt;/a&gt;&lt;br/&gt;なんかを読みました。とにかく「AngularJSすげ～！」ってなりました。
&lt;/p&gt;

&lt;h5&gt;これから作るサイトの事&lt;/h5&gt;
&lt;p&gt;
以上を踏まえて、大雑把に以下様な感じで進めて行きたいと思います。
&lt;ul&gt;
　&lt;li&gt;CakephpのView部分はJSON吐き出しとAngulaJS用のページに分ける。&lt;/li&gt;
　&lt;li&gt;AngularJSのソース部分はCakephpのViewファイルに書く&lt;/li&gt;
&lt;/ul&gt;
これで上手く行くかは分かりませんが、進めて行きたいです。
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2013/03/cakephpangularjsweb.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-6449827084753360476</guid><pubDate>Wed, 01 Aug 2012 12:30:00 +0000</pubDate><atom:updated>2012-08-01T21:31:26.740+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>[Cakephp2.2][Twitter bootstrap2.0.4]CakephpでTwitter bootstrapのサンプルサイトを作る。その5</title><description>&lt;p&gt;
最近オリンピックのサッカーの試合みてばかりで寝不足です。目指せアベック優勝！！！
&lt;/p&gt;
&lt;h4&gt;Controllerの概要&lt;/h4&gt;
&lt;h5&gt;Controllerの役目&lt;/h5&gt;
&lt;p&gt;CakephpのControllerは色々と指示を出す人です。多分、日本名は魂斗羅くんです。流行りのキラキラネームですが、仕事はできるヤツです。&lt;br /&gt;
魂斗羅くんはユーザーの注文を受け取って、ModelやView（美優さん）をこき使い、ユーザーに正しく返答できるようにするのが責任範囲です。&lt;br /&gt;
関係ないModelやViewは呼び出しません。必要に応じて美優さんに助っ人つけます。そんな感じの仕事をしてます。&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;h5&gt;PagesControllerを改造する&lt;/h5&gt;
&lt;p&gt;
今までの所index.ctpでレイアウトを指定してますが、これをPagesControllerで指定するように変更します。&lt;br /&gt;
index.ctpのレイアウトを設定している部分を削除します。
&lt;pre&gt;app/View/Pages/index.ctp&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;
&amp;lt;?php 
//$this-&gt;layout = &quot;guest&quot;;
?&amp;gt;
...
 &lt;/pre&gt;
&lt;/div&gt;
PagesControllerのindexメソッドにレイアウトをguestに設定します。
&lt;pre&gt;app/Controller/PagesController&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;...

 public function index(){
  $this-&gt;layout = &quot;guest&quot;;
 }
 
...&lt;/pre&gt;
&lt;/div&gt;
ブラウザで「dream-travel.boo.jp/twitter_bootstrap_2.0.4/」にアクセスします。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpl4z277Shi5btJmZaTwD8TymYGhTNHX6Mfg8-Wu1kz1sgwPNKj_MGCepzxLIfttAT2PI2ZrgSrLxB4WaMlL2oJkNM69btpjUEk5SJo3Of7KoBGBvvNcDx5KD8iHNndSXAneg9Uzgcq94/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+8.58.40.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;76&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpl4z277Shi5btJmZaTwD8TymYGhTNHX6Mfg8-Wu1kz1sgwPNKj_MGCepzxLIfttAT2PI2ZrgSrLxB4WaMlL2oJkNM69btpjUEk5SJo3Of7KoBGBvvNcDx5KD8iHNndSXAneg9Uzgcq94/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+8.58.40.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
見た目が変わらないので、よく分かりませんがとりあえずOKです。&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h5&gt;他のページを追加する。&lt;/h5&gt;
&lt;p&gt;とりあえず1ページだけ追加してみます。まず、routesの設定をコメントアウトします。&lt;br /&gt;
&lt;pre&gt;app/Config/routes.php&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;
...
// Router::connect(&#39;/pages/*&#39;, array(&#39;controller&#39; =&gt; &#39;pages&#39;, &#39;action&#39; =&gt; &#39;display&#39;)); //コメントアウトします。
...
 &lt;/pre&gt;
&lt;/div&gt;
これは、urlが「/pages/hoge」や「/pages/page」とかなら、PagesControllerのdisplayメソッドを呼び出すようにしているので無効にしています。&lt;br /&gt;
後は簡単で2箇所修正します。コントローラにメソッドを追加します。&lt;br /&gt;
&lt;pre&gt;app/Controller/PagesController&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;...

 public function index(){
  $this-&gt;layout = &quot;guest&quot;;
 }
 //add
 public function scaffolding() {
  $this-&gt;layout = &quot;guest&quot;;
 }

...&lt;/pre&gt;
&lt;/div&gt;
Viewも追加します。中身はまあ、ここでは適当にしておきます。
&lt;pre&gt;app/View/Pages/scaffolding.ctp&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;
&amp;lt;?php 
?&amp;gt;
&amp;lt;div class=&quot;row&quot;&amp;gt;
 &amp;lt;div class=&quot;span3&quot;&amp;gt;サイド&amp;lt;/div&amp;gt;
 &amp;lt;div class=&quot;span9&quot;&amp;gt;scaffolding&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/pre&gt;
&lt;/div&gt;
ブラウザで「dream-travel.boo.jp/twitter_bootstrap_2.0.4/pages/scaffolding」にアクセスします。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ubqDV_E0RrK94KRg32DqEswNnF5k3kIQxVuwnxpRHsJt0xT3eDOpfgfzKZ_9tNlCkLYw-6NEp9io_9-UzhTBNsmluwUGwhtCSeUz4lNtkZd6cJF4_EiX4aJbQRxgBK5RTBH7_iE8fbo/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.19.22.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;57&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ubqDV_E0RrK94KRg32DqEswNnF5k3kIQxVuwnxpRHsJt0xT3eDOpfgfzKZ_9tNlCkLYw-6NEp9io_9-UzhTBNsmluwUGwhtCSeUz4lNtkZd6cJF4_EiX4aJbQRxgBK5RTBH7_iE8fbo/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.19.22.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
... 相変わらず変化しないので、分かりづらいですがOKのようです。&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;h5&gt;色々と試す&lt;/h5&gt;
&lt;p&gt;ここで色々と試してみたいと思います。とりあえず以下の用にscaffoldingメソッド内でレイアウトをdefaultに指定してみます。
&lt;pre&gt;app/Controller/PagesController&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;...

 public function index(){
  $this-&gt;layout = &quot;guest&quot;;
 }
 public function scaffolding() {
  $this-&gt;layout = &quot;default&quot;;
 }

...&lt;/pre&gt;
&lt;/div&gt;
ブラウザで各アドレスにアクセスします。&lt;br /&gt;
「dream-travel.boo.jp/twitter_bootstrap_2.0.4/」&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5av3_ffeq8ruSgAHcXouIetRpM2k8Hra69Ji_u3_bxIuu8Y5KbwfFa-9D9fOo6xbwnJOv8BpzSXH1h2QAe5hHhSRio6HhcbQKoCLuey6-Lo_nN-stURg_O1hI0Gj39-BN3-fJIGh51zQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.29.13.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;62&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5av3_ffeq8ruSgAHcXouIetRpM2k8Hra69Ji_u3_bxIuu8Y5KbwfFa-9D9fOo6xbwnJOv8BpzSXH1h2QAe5hHhSRio6HhcbQKoCLuey6-Lo_nN-stURg_O1hI0Gj39-BN3-fJIGh51zQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.29.13.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;

「dream-travel.boo.jp/twitter_bootstrap_2.0.4/pages/scaffolding」&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBYrQ2eHsv4jOFsUmaxU9KZ7pnpO4eRyXd7WbEgmSzuZnk1CTpsM0_PSkHh-oq6Cy0ur7j7J8aQjFaIKxF5iAgpGK_i5wAJgPTpOmp97tCOo5cDFvcfkifLYsKoPEG6-WLTpqHyIJQJGQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.29.26.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;70&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBYrQ2eHsv4jOFsUmaxU9KZ7pnpO4eRyXd7WbEgmSzuZnk1CTpsM0_PSkHh-oq6Cy0ur7j7J8aQjFaIKxF5iAgpGK_i5wAJgPTpOmp97tCOo5cDFvcfkifLYsKoPEG6-WLTpqHyIJQJGQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.29.26.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
scaffoldingの方はCakephpデフォルトのレイアウトが適応されてます。つまりメソッド毎にレイアウトを振り分ける事ができます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もう一つ試します。PagesControllerのメンバでレイアウトを設定してみます。&lt;br /&gt;
&lt;pre&gt;app/Controller/PagesController&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;...
 
/**
 * This controller does not use a model
 *
 * @var array
 */
 public $uses = array();
 
 public $helpers = array(&#39;B99TwitterBootstrap&#39;);
 
 public $layout = &quot;guest&quot;;

...

 public function index(){
  //$this-&gt;layout = &quot;guest&quot;;　←実際は削除する。
 }
 public function scaffolding() {
  //$this-&gt;layout = &quot;default&quot;;　←実際は削除する。
 }
 
...&lt;/pre&gt;
&lt;/div&gt;
ブラウザで各アドレスにアクセスします。&lt;br /&gt;
「dream-travel.boo.jp/twitter_bootstrap_2.0.4/」&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6BgNQilM54u83HDNKZphg1iBEfgbDnCcDRJwkHR-a7VEuNJlLZ9OocS1dSFn4fr7JwT3EAetVbpASq3_2RBBF6o5_PnhqqcOZgmxlPKbaxOCdYtUye3J_E0ZjvAtsQKkzE3W2T6AYD3k/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.37.03.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6BgNQilM54u83HDNKZphg1iBEfgbDnCcDRJwkHR-a7VEuNJlLZ9OocS1dSFn4fr7JwT3EAetVbpASq3_2RBBF6o5_PnhqqcOZgmxlPKbaxOCdYtUye3J_E0ZjvAtsQKkzE3W2T6AYD3k/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.37.03.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
「dream-travel.boo.jp/twitter_bootstrap_2.0.4/pages/scaffolding」&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBGokkDnKRPp4oKTmSMv85CgOH2k6fUlKDaWWCGX6u6R5YEs6SFkbF8naZQxquil70OL6-R-r9iQWs2Of52vfVd4_3r00E41ztnCK8KMeInjC28F4dtL4Bu2PapjaTjibAuKJaZi-Z-Lg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.37.17.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;113&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBGokkDnKRPp4oKTmSMv85CgOH2k6fUlKDaWWCGX6u6R5YEs6SFkbF8naZQxquil70OL6-R-r9iQWs2Of52vfVd4_3r00E41ztnCK8KMeInjC28F4dtL4Bu2PapjaTjibAuKJaZi-Z-Lg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+20.37.17.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
両方共guestのレイアウトが適応されてます。メソッド毎に変えないという事ならこれでも良いです。&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;h5&gt;もっと汎用的にレイアウトを設定する&lt;/h5&gt;
&lt;p&gt;
 上記の方法でそれぞれレイアウトを設定しても問題ないのですが、Cakephp1.3で何個かサイト作った経験で私は定形的以下の方法でやってます。&lt;br /&gt;
 1.AppControllerを修正します。beforeFilter()を追加して、その中に条件付きでレイアウト設定します。
 &lt;pre&gt;app/Controller/AppControllerを修正&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;
...

class AppController extends Controller {
 
 public function beforeFilter(){
  //レイアウトの設定
  if (Configure::read(&#39;debug&#39;) == 0) {
   $this-&gt;layout = &quot;guest&quot;;
  }
 }
}
  &lt;/pre&gt;
 &lt;/div&gt;
 Cakephp的に全てのコントローラはAppControllerを継承する必要があります。なのでこのコントローラで設定した事は全てのコントローラに適応されます。&lt;br /&gt;
 また、beforeFilter()メソッドはCakephpのコールバックの1つで、コントローラの各アクションの前に実行されます。&lt;br /&gt;
 Configure::read(&#39;debug&#39;)はapp/Config/core.phpで設定するデバッグのレベルを取得します。&lt;br /&gt;
 なのでここで追加した内容は、「全てのコントローラのアクション実行前にデバッグレベルが0だったらレイアウトをguestに設定する」という事をしてます。&lt;br /&gt;
 &lt;br /&gt;
 2.各コントローラにbeforeFilter()を追加して、その中に条件付きでレイアウト設定します。ここではPagesControllerを修正します。
 &lt;pre&gt;app/Controller/PagesController&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;
 ...
 
 // public $layout = &quot;guest&quot;; //←実際は削除
 
 ...
 
 public function beforeFilter(){
  //レイアウトの設定
  if (&#39;CakeError&#39; === $this-&gt;name &amp;&amp; Configure::read(&#39;debug&#39;) &gt; 0){
   $this-&gt;layout = &quot;defalut&quot;;
  } else if(&#39;admin&#39; === $this-&gt;request[&#39;prefix&#39;]) {
//   $this-&gt;layout = &quot;admin&quot;;
  } else {
   $this-&gt;layout = &quot;guest&quot;;
  } 
 }
 &lt;/pre&gt;
&lt;/div&gt;
 この追加は何をしているかと言うと、PagesControllerの各アクション前に&lt;br /&gt;
 &lt;ol&gt;
  &lt;li&gt;エラーがあるかつデバッグレベルが0を超えていたらレイアウトはdefalut&lt;/li&gt;
  &lt;li&gt;管理者用のアクセスだったらレイアウトはadmin&lt;/li&gt;
  &lt;li&gt;それ以外はguest&lt;/li&gt;
 &lt;/ol&gt;
 という事をやっています。管理者のアクセスについてはここでは説明省きますが、とにかくユーザーアクセスの状態によってレイアウト設定を振り分けてます。&lt;br /&gt;
 &lt;br /&gt; 
&lt;/p&gt;


&lt;h5&gt;汎用的にレイアウトを設定した場合アクセス結果&lt;/h5&gt;
&lt;p&gt;
 上の修正をした時のアクセス結果のスクショです。
 &lt;table&gt;
  &lt;tr&gt;
   &lt;th&gt;URL&lt;/th&gt;
   &lt;th&gt;デバッグレベル　2&lt;/th&gt;
   &lt;th&gt;デバッグレベル　0&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;th&gt;dream-travel.boo.jp/twitter_bootstrap_2.0.4/&lt;/th&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDjd3ZOWGv4x25G2yybTqvQohuh-bbpPkcmO45hLjeO4Jpz1nTnRcUq6_jahFWf5KXcRxUNkKAGC1gFWaGBWUZdx52a1-WJLjM9DsylcmtjL6lbPoxJMDBAZf2F6sdbLJl3Z-rB75PQ-Q/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.29.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;137&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDjd3ZOWGv4x25G2yybTqvQohuh-bbpPkcmO45hLjeO4Jpz1nTnRcUq6_jahFWf5KXcRxUNkKAGC1gFWaGBWUZdx52a1-WJLjM9DsylcmtjL6lbPoxJMDBAZf2F6sdbLJl3Z-rB75PQ-Q/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.29.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8o9p9JSD1B9g3GQTDCV7ULPXsuOZrN44EImWnH4iupyTrDW2AhXM3dzNoxaB1osK27ZKRdOzDPOywSzEaKQ8ZVO12WZKRkZfsO1wPPddLpy4fDD3R0viwQD1TfInBLGEj2AJo2hoQm3A/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.15.13.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8o9p9JSD1B9g3GQTDCV7ULPXsuOZrN44EImWnH4iupyTrDW2AhXM3dzNoxaB1osK27ZKRdOzDPOywSzEaKQ8ZVO12WZKRkZfsO1wPPddLpy4fDD3R0viwQD1TfInBLGEj2AJo2hoQm3A/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.15.13.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;th&gt;dream-travel.boo.jp/twitter_bootstrap_2.0.4/pages/hoge&lt;/th&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ADkQD6Ab52d9p8UwPE6FUPSJBkdtVD93Kz-w9xHSLKqX8Vi1n2HVGDX0M83mFz91-q5h4ngT0FAQb21QQnMKghM0_N1aB66hH-gGvfe-h8tAbgzIeIwt4P6w4mdeuKkdhDQhyphenhyphen-XATG8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.37.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;142&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ADkQD6Ab52d9p8UwPE6FUPSJBkdtVD93Kz-w9xHSLKqX8Vi1n2HVGDX0M83mFz91-q5h4ngT0FAQb21QQnMKghM0_N1aB66hH-gGvfe-h8tAbgzIeIwt4P6w4mdeuKkdhDQhyphenhyphen-XATG8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.37.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmxBYrxTN_ZwCnzdCr3hLtGMPZarhbIQ0DYP6rE3jgqeWjikMRR1eiEo5tSpIdK8JhqE8Bk7SOr3Xmkkza-TraXLEYLevM-XLe_dkGJ32WJJQ0EG0B4G19cDjABOMPJWj1PW_hwT-EvRk/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.15.05.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;101&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmxBYrxTN_ZwCnzdCr3hLtGMPZarhbIQ0DYP6rE3jgqeWjikMRR1eiEo5tSpIdK8JhqE8Bk7SOr3Xmkkza-TraXLEYLevM-XLe_dkGJ32WJJQ0EG0B4G19cDjABOMPJWj1PW_hwT-EvRk/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.15.05.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;th&gt;dream-travel.boo.jp/twitter_bootstrap_2.0.4/hoge&lt;/th&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeO7eXLOge7RfL6C94jmE4BBIEgiwriQwDW13Hdwl3DnB3Avt8HIO8nzYujJt4FzmIm_NFTiQB_KEuG2hfKlu8RGwBiigstBZvf4-LIMPQNV1AtoEUwrocur02dYVhQPxIoLdwurKgt0I/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.47.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;157&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeO7eXLOge7RfL6C94jmE4BBIEgiwriQwDW13Hdwl3DnB3Avt8HIO8nzYujJt4FzmIm_NFTiQB_KEuG2hfKlu8RGwBiigstBZvf4-LIMPQNV1AtoEUwrocur02dYVhQPxIoLdwurKgt0I/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+20.58.47.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
   &lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhokxuuseuQBG3tqe-r5H_pq2kjRfewpy1E8hTJELG443NCpofhv36Hfe_-BTqoHb0x7AdY2PbTY3DLKCRi5Tu80NsU5vC3uTVmGfAdtrIyRH3D-5v_MUHLCHmWPEZxo54Dr7hTMqOPrA8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.18.17.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;95&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhokxuuseuQBG3tqe-r5H_pq2kjRfewpy1E8hTJELG443NCpofhv36Hfe_-BTqoHb0x7AdY2PbTY3DLKCRi5Tu80NsU5vC3uTVmGfAdtrIyRH3D-5v_MUHLCHmWPEZxo54Dr7hTMqOPrA8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-08-01+21.18.17.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
 &lt;/table&gt;
 いかがでしょうか？まあ、これはあくまでも私が個人的いいなと思っている方法なので色々とアラがあるかもしれませんが、良かったら皆さんも試してみて下さい。&lt;br /&gt;
&lt;/p&gt;


&lt;h5&gt;まとめ&lt;/h5&gt;
&lt;p&gt;
 &lt;ul&gt;
  &lt;li&gt;コントローラで色々と仕事を振り分ける&lt;/li&gt;
  &lt;li&gt;設定をコントローラで行う事もある&lt;/li&gt;
  &lt;li&gt;AppControllerとかコールバック関数とかがある&lt;/li&gt;
 &lt;/ul&gt;
 &lt;br /&gt;
&lt;/p&gt;

&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;p&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.0&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;Macmini&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2012/08/cakephp22twitter-bootstrap204cakephptwi.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpl4z277Shi5btJmZaTwD8TymYGhTNHX6Mfg8-Wu1kz1sgwPNKj_MGCepzxLIfttAT2PI2ZrgSrLxB4WaMlL2oJkNM69btpjUEk5SJo3Of7KoBGBvvNcDx5KD8iHNndSXAneg9Uzgcq94/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-31+8.58.40.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-5398338952069771921</guid><pubDate>Mon, 30 Jul 2012 12:30:00 +0000</pubDate><atom:updated>2012-07-30T21:43:42.251+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Eclipse</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>[Cakephp2.2][Twitter bootstrap2.0.4]CakephpでTwitter bootstrapのサンプルサイトを作る。その4（道草）</title><description>&lt;h4&gt;Eclipseのテンプレート機能&lt;/h4&gt;
&lt;h5&gt;Bootstrapは便利だけど面倒くさい&lt;/h5&gt;
&lt;p&gt;Bootstrapを使うと、デザイン的にはサクッとやってくれますが、コーディング量は多くなります。特にrowとかspanとはたくさん使うので面倒です。&lt;br /&gt;
Eclipseを使っている場合はテンプレートという機能を使えば楽になります。&lt;/p&gt;
&lt;h5&gt;設定方法&lt;/h5&gt;
&lt;p&gt;Eclopse→環境設定（Windowsはウィンドウ→設定でしたっけ？）からWeb→HTMLファイル→エディター→テンプレートを選択します。&lt;br /&gt;
右側の「新規」ボタンをクリックします。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM2DPp8pLXeJ-pRsh109DBZziiFq61Ur_jhMWc9HAk2q0UkRVajvAGhj3njIUJDaC7KxrcpWOJUy1KYrfiPX0lKOOycsd1dwlRK_do7f7_EtqT1aqJeZeVv9BIs0aRIS7584CApUiFkpk/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.11.19.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM2DPp8pLXeJ-pRsh109DBZziiFq61Ur_jhMWc9HAk2q0UkRVajvAGhj3njIUJDaC7KxrcpWOJUy1KYrfiPX0lKOOycsd1dwlRK_do7f7_EtqT1aqJeZeVv9BIs0aRIS7584CApUiFkpk/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.11.19.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
名前、パターンを入力します。ここでは名前は「tb_row_span」（Twitter Bootstrapのrow、spanの意味）としてます。パターンはdivタグにクラスを指定してます。spanの後ろは数字を入れるですが、都度変更するので変数を指定してます。パターンの中に「${}」を入れて変数に出来ます。ここでは数字を入れたいので「int1」とかしてます。変数名は重複しなければ特に何でも問題ないと思います（多分）。良ければ「OK」を押して設定します。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6LNR9i8ALB-4sc0rfiCizGV77YkS-mdVyQNmfR8f7IUh_6ggNFFjXN6Ve4bGMKmVbSTATNrtpKLjC-X93uwuP9GumGNnlECL9SmQttcSGtjvyE0qRcldRg_lLcMS-xFXN-MADnvIz344/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.11.46.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6LNR9i8ALB-4sc0rfiCizGV77YkS-mdVyQNmfR8f7IUh_6ggNFFjXN6Ve4bGMKmVbSTATNrtpKLjC-X93uwuP9GumGNnlECL9SmQttcSGtjvyE0qRcldRg_lLcMS-xFXN-MADnvIz344/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.11.46.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h5&gt;使ってみる&lt;/h5&gt;
&lt;p&gt;「Ctrl + space」でコード補完を表示してから「tb」と打つと今設定した内容が表示されます。選択して「Enter」押します。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0V58KCeOMmTxoxcvqq6mAOXWp1RSp0WAUddQ__5rkXQyi_7jVoEyIcMv7xTriUTJbGjETbVLMH17_EeVx_nd5AVu78xk2A6BfCaELbh4dRldgx051QsrDvY5vVx5sbU2yG_qZPNZU-2k/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.12.13.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;125&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0V58KCeOMmTxoxcvqq6mAOXWp1RSp0WAUddQ__5rkXQyi_7jVoEyIcMv7xTriUTJbGjETbVLMH17_EeVx_nd5AVu78xk2A6BfCaELbh4dRldgx051QsrDvY5vVx5sbU2yG_qZPNZU-2k/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.12.13.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
span後ろの各変数の位置を「tab」キーで切り替えながら入力出来ます。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2VL41gLt87c8X1WTNPu2qUSw98o5Wd7CuhCdU9q4xShjyo2qxRswyV7pHxi4zDDU9lRwOfdQhokGogPMW4IafW0bHt85aAQdnvgufhVXcKtFlqVT8tq8PRljT4x6Cm-DEnoWFwdwUCvw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.12.50.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2VL41gLt87c8X1WTNPu2qUSw98o5Wd7CuhCdU9q4xShjyo2qxRswyV7pHxi4zDDU9lRwOfdQhokGogPMW4IafW0bHt85aAQdnvgufhVXcKtFlqVT8tq8PRljT4x6Cm-DEnoWFwdwUCvw/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.12.50.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
後は自分の使いたいテンプレートを増やして行くだけです。簡単ですね。
&lt;/p&gt;


&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;p&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.0&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;Macmini&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2012/07/cakephp22twitter-bootstrap204cakephptwi.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM2DPp8pLXeJ-pRsh109DBZziiFq61Ur_jhMWc9HAk2q0UkRVajvAGhj3njIUJDaC7KxrcpWOJUy1KYrfiPX0lKOOycsd1dwlRK_do7f7_EtqT1aqJeZeVv9BIs0aRIS7584CApUiFkpk/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-30+21.11.19.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-3827459324278921148</guid><pubDate>Sat, 28 Jul 2012 00:00:00 +0000</pubDate><atom:updated>2012-07-30T10:25:52.575+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>CakephpでTwitter bootstrapのサンプルサイトを作る。その3</title><description>&lt;p&gt;大分前ですが、駅で電車を待っていたら事故か何かでダイヤが乱れてました。その時遅れている事をアナウンスしていた（おそらく新入社員の）女性駅員さんが、アナウンスする度に駅名を噛んでました。&lt;br /&gt;
...駅員が駅名噛んだらマズイだろ。と思ってました。そしてついでに萌えてました(*´ω｀*)&lt;/p&gt;
&lt;h4&gt;layoutを改造する&lt;/h4&gt;
&lt;h5&gt;グローバルナビが欲しい今日この頃&lt;/h5&gt;
&lt;p&gt;レイアウトのguest.ctpを作ってきましたが、やっぱりナビが欲しいと思いました。しかもBootstrapのナビバーがいいなぁ~と思いました。かっこいいですよねあれ。&lt;br /&gt;
まあ、Bootstrap用のサイト作るなら必須だなと後から気づいた訳ですけども。&lt;br /&gt;
やっぱり&lt;a href=&quot;http://twitter.github.com/bootstrap/examples/starter-template.html&quot;&gt;Bootstrapのサンプルページ&lt;/a&gt;からナビバーの部分だけコピペします。
&lt;pre&gt;app/View/Layout/guest.ctpを変更&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;pre&gt;
...&lt;br /&gt;
&amp;lt;div id=&quot;header&quot;&amp;gt;
 &amp;lt;div class=&quot;navbar&quot;&amp;gt;
      &amp;lt;div class=&quot;navbar-inner&quot;&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;
          &amp;lt;a class=&quot;btn btn-navbar&quot; data-toggle=&quot;collapse&quot; data-target=&quot;.nav-collapse&quot;&amp;gt;
            &amp;lt;span class=&quot;icon-bar&quot;&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;span class=&quot;icon-bar&quot;&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;span class=&quot;icon-bar&quot;&amp;gt;&amp;lt;/span&amp;gt;
          &amp;lt;/a&amp;gt;
          &amp;lt;a class=&quot;brand&quot; href=&quot;#&quot;&amp;gt;Bootstrap コピペ場&amp;lt;/a&amp;gt;
          &amp;lt;div class=&quot;nav-collapse&quot;&amp;gt;
            &amp;lt;ul class=&quot;nav&quot;&amp;gt;
              &amp;lt;li class=&quot;active&quot;&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
              &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#about&quot;&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
              &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#contact&quot;&amp;gt;Contact&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
...
 &lt;/pre&gt;
&lt;/div&gt;
こういうCSSフレームワークを使うとどうしても、上のような感じに入れ子&amp;amp;クラス名が多くなるんですよね。そこはまあ、納得してお付き合いしてかなければいけないんですけども。&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;h5&gt;助っ人&lt;/h5&gt;
&lt;p&gt;
 前回書いたViewこと美優さんは健気に頑張っています。あまりに大変そうなのでControllerさんが気を利かせて助っ人を付けてます。HtmlHelperです。前回美優さんの隠し玉とかいてたHelperの1つです。
 HtmlHelperはすでに何回も出てきています。guest.ctpを確認すると以下の箇所があります。&lt;br /&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;code&gt;
   $this-&gt;Html-&gt;charset()&lt;br /&gt;
  &lt;/code&gt;
 &lt;/div&gt;
 すなわち$this（＝美優さん）のHtml助っ人（＝HtmlHelper)のcharset()という仕事を実行していた訳です。文字列を返し例えばcharset()なら以下の文字列返します。
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;code&gt;
   &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&amp;gt;
  &lt;/code&gt;
 &lt;/div&gt;
 助っ人さんは他にいます。FormHelperとかですが、今は出番が無いので放置します。&lt;br /&gt;
 助っ人さんの役目は、複数のビューやエレメント、レイアウトで共有する処理を目的別にまとめておく事です。HtmlHelperなら、htmlタグを返すメソッドがそろってます。&lt;br /&gt;
 後でHtmlHelperのメソッドをまとめたいです。
&lt;/p&gt;
&lt;br /&gt;
&lt;h5&gt;自作の助っ人&lt;/h5&gt;
&lt;p&gt;
 助っ人は自作出来ます。今後Bootstrapの関連のタグをたくさん使いそうなので、Bootstrap用の助っ人を作ってみようとおもいます。&lt;br /&gt;
 約束事があります。
 &lt;ul&gt;
  &lt;li&gt;ファイル作成場所は「app/View/Helper」の下&lt;/li&gt;
  &lt;li&gt;AppHelperを継承する。&lt;/li&gt;
  &lt;li&gt;Viewで使用するHelperはController内で設定する&lt;/li&gt;
 &lt;/ul&gt;
 取り敢えずシンプルなナビバーを返すところから始めます。以下コード。
 &lt;pre&gt;app/View/Helper/B99TwitterBootstrapHelper.phpを新たに作成。&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;&amp;lt;?php
/**
 * Twitter Bootstrap用のヘルパー
 */
App::uses(&amp;#039;AppHelper&amp;#039;, &amp;#039;View/Helper&amp;#039;);

class B99TwitterBootstrapHelper extends AppHelper {
 public $helpers = array(&amp;#039;Html&amp;#039;);
 
 /**
  * 
  * @return String navbar tag string
  */
 public function simpleNavbar(){
  $result = &amp;lt;&amp;lt;&amp;lt;NAV
&amp;lt;div class=&amp;quot;navbar&amp;quot;&amp;gt;
 &amp;lt;div class=&amp;quot;navbar-inner&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;
   &amp;lt;a class=&amp;quot;btn btn-navbar&amp;quot; data-toggle=&amp;quot;collapse&amp;quot; data-target=&amp;quot;.nav-collapse&amp;quot;&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
   &amp;lt;a class=&amp;quot;brand&amp;quot; href=&amp;quot;#&amp;quot;&amp;gt;Bootstrap コピペ場&amp;lt;/a&amp;gt;
   &amp;lt;div class=&amp;quot;nav-collapse&amp;quot;&amp;gt;
    &amp;lt;ul class=&amp;quot;nav&amp;quot;&amp;gt;
     &amp;lt;li class=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
     &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#about&amp;quot;&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
     &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#contact&amp;quot;&amp;gt;Contact&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
NAV;
  return $result;
 }
}&lt;/pre&gt;
 &lt;/div&gt;
 &lt;pre&gt;app/Controller/PagesControllerに追加&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;public $helpers = array(&#39;B99TwitterBootstrap&#39;);&lt;/pre&gt;
 &lt;/div&gt;
 そのままナビバーを表示しても見た目が変わらないのでデバッグ出力します。
 &lt;pre&gt;app/View/Pages/index.ctpに追加&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;&amp;lt;?php 
$this-&gt;layout = &quot;guest&quot;;
debug($this-&gt;B99TwitterBootstrap-&gt;simpleNavbar());
?&amp;gt;
...&lt;/pre&gt;
 &lt;/div&gt;
 ブラウザでアクセスします。&lt;br /&gt;
 &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguCUrfRX1TKo4EnWkOZ4Y0auWHJmFW4gHfL0tmhoyVoqOv00ni-Ntxzv7Axbvex4A8LVx2nVnMxm75JPiVLm9B5-_VnMo1Z8NDBtF0B5oHp3wz5uLarFOG9V_Eq6DqB7G_8omWE8mYxI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-27+18.32.34.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;177&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguCUrfRX1TKo4EnWkOZ4Y0auWHJmFW4gHfL0tmhoyVoqOv00ni-Ntxzv7Axbvex4A8LVx2nVnMxm75JPiVLm9B5-_VnMo1Z8NDBtF0B5oHp3wz5uLarFOG9V_Eq6DqB7G_8omWE8mYxI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-27+18.32.34.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
 自作した助っ人がちゃんと動作しているようです。
&lt;/p&gt;
&lt;br /&gt;
&lt;h5&gt;さらに自作の助っ人&lt;/h5&gt;
&lt;p&gt;
 B99TwitterBootstrapHelperを作ってみましたが、固定の文字列を返すだけでこのままでは使い勝手が良くありません。下のリストのようにさらに改造します。&lt;br /&gt; 
 &lt;ul&gt;
  &lt;li&gt;プロジェクト名を引数で渡す&lt;/li&gt;
  &lt;li&gt;リンク先を引数で渡す&lt;/li&gt;
  &lt;li&gt;「class=&quot;active&quot;」って所を自動で判別して差し込む&lt;/li&gt;
 &lt;/ul&gt;
 &lt;pre&gt;app/View/Helper/B99TwitterBootstrapHelper.phpを修正&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;
...
 /**
  * 
  * シンプルなナビバーを作って返す
  * @param array $brand array( &amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Bootstrap コピペ場&amp;#039;, &amp;#039;url&amp;#039; =&amp;gt; &amp;#039;/&amp;#039;)titleはaタグに挟まれる文字列、urlはAタグのリンク先
  * @param array $links　$links = array(&amp;#039;index&amp;#039; =&amp;gt; array( &amp;#039;title&amp;#039; =&amp;gt; &amp;#039;Home&amp;#039;, &amp;#039;url&amp;#039; =&amp;gt; &amp;#039;/&amp;#039;))keyは$active_strと合う文字列、titleはaタグに挟まれる文字列、urlはAタグのリンク先
  * @param string $$active_str
  * @return String navbar tag string
  */
 public function simpleNavbar($brand, $links, $active_str){
  $link_li_tag = &amp;quot;&amp;quot;;
  $brand_a_tag = &amp;quot;&amp;quot;;
  //このfor文の中でactiveなclassの値を設定する
  foreach ($links as $key =&amp;gt; $val) {
   //classがあるかチェック無ければ追加する
   if (!isset($val[&amp;#039;class&amp;#039;])) {
    $val[&amp;#039;class&amp;#039;] = &amp;quot;&amp;quot;;
   }
   //activeなliタグかチェック
   if ($key==$active_str){
    //classに「active」文字列を追加
    $val[&amp;#039;class&amp;#039;] .= &amp;quot; active&amp;quot;;
   }
   //配列の値を設定し直す
   $links[$key] = $val;
  }
  //liタグを作る
  foreach ($links as $key =&amp;gt; $val){
   $link_li_tag .= &amp;quot;     &amp;quot; . $this-&amp;gt;Html-&amp;gt;tag(&amp;#039;li&amp;#039;, $this-&amp;gt;Html-&amp;gt;link($val[&amp;#039;title&amp;#039;] , $val[&amp;#039;url&amp;#039;]), $val[&amp;#039;class&amp;#039;]) . &amp;quot;
&amp;quot;;
  }
  //プロジェクト名のaタグを作る
  $brand_a_tag = $this-&amp;gt;Html-&amp;gt;link($brand[&amp;#039;title&amp;#039;], $brand[&amp;#039;url&amp;#039;], array(&amp;#039;class&amp;#039;=&amp;gt;&amp;#039;brand&amp;#039;));
  //ナビバーの文字列を返す
  return &amp;lt;&amp;lt;&amp;lt;NAV
&amp;lt;div class=&amp;quot;navbar&amp;quot;&amp;gt;
 &amp;lt;div class=&amp;quot;navbar-inner&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;
   &amp;lt;a class=&amp;quot;btn btn-navbar&amp;quot; data-toggle=&amp;quot;collapse&amp;quot; data-target=&amp;quot;.nav-collapse&amp;quot;&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span class=&amp;quot;icon-bar&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
   {$brand_a_tag}
   &amp;lt;div class=&amp;quot;nav-collapse&amp;quot;&amp;gt;
    &amp;lt;ul class=&amp;quot;nav&amp;quot;&amp;gt;
{$link_li_tag}
    &amp;lt;/ul&amp;gt;
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
NAV;
 }
...
  &lt;/pre&gt;
 &lt;/div&gt;
 &lt;pre&gt;app/View/Pages/index.ctpからコメントアウト（もしくは削除）&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;&amp;lt;?php 
$this-&gt;layout = &quot;guest&quot;;
//debug($this-&gt;B99TwitterBootstrap-&gt;simpleNavbar());
?&amp;gt;
...&lt;/pre&gt;
 &lt;/div&gt;
 &lt;pre&gt;app/View/Layout/guest.ctpへ追加&lt;/pre&gt;
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;pre&gt;&amp;lt;?php 
$brand = array( &#39;title&#39; =&gt; &#39;Bootstrap コピペ場&#39;, &#39;url&#39; =&gt; &#39;/&#39;);
$links = array(
 &#39;index&#39;  =&gt; array( &#39;title&#39; =&gt; &#39;Home&#39;, &#39;url&#39; =&gt; &#39;/&#39;),
 &#39;scaffolding&#39; =&gt; array( &#39;title&#39; =&gt; &#39;Scaffolding&#39;, &#39;url&#39; =&gt; &#39;/pages/scaffolding&#39;),
 &#39;base-css&#39;  =&gt; array( &#39;title&#39; =&gt; &#39;Base Css&#39;, &#39;url&#39; =&gt; &#39;/pages/base-css&#39;),
 &#39;components&#39; =&gt; array( &#39;title&#39; =&gt; &#39;Components&#39;, &#39;url&#39; =&gt; &#39;/pages/components&#39;),
 &#39;javascript&#39; =&gt; array( &#39;title&#39; =&gt; &#39;Javascript Plugins&#39;, &#39;url&#39; =&gt; &#39;/pages/javascript&#39;),
 &#39;about&#39;  =&gt; array( &#39;title&#39; =&gt; &#39;About&#39;, &#39;url&#39; =&gt; &#39;/pages/about&#39;),
);

debug($this-&gt;B99TwitterBootstrap-&gt;simpleNavbar($brand, $links, $this-&gt;request-&gt;params[&#39;action&#39;]));

...

  &amp;lt;div id=&quot;header&quot;&amp;gt;
&amp;lt;?php echo $this-&gt;B99TwitterBootstrap-&gt;simpleNavbar($brand, $links, $this-&gt;request-&gt;params[&#39;action&#39;]);?&amp;gt;
  &amp;lt;/div&amp;gt;
...
&lt;/pre&gt;
 &lt;/div&gt;
 ブラウザでアクセスする。&lt;br /&gt;
 &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYpWcg3y9eVzX6Mv07khd12ugNt4TKDadv4MJxnRCTfvLSkfrsUhJpPk7Zw2w9xuW52za9JtDXvn9Kfk6NpZg8qJtJupTa__ImOJXUq9cnJknDtJzfSFM7MQdHQ65tEY6qojUNhtFD0DE/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-27+23.19.54.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYpWcg3y9eVzX6Mv07khd12ugNt4TKDadv4MJxnRCTfvLSkfrsUhJpPk7Zw2w9xuW52za9JtDXvn9Kfk6NpZg8qJtJupTa__ImOJXUq9cnJknDtJzfSFM7MQdHQ65tEY6qojUNhtFD0DE/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-27+23.19.54.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
 オッケーのようなのでguest.ctpからdebug()メソッドを削除する。&lt;br /&gt;
 これで晴れてグローバルで動的にactiveが変化するナビバーの出来上がり...のはず。&lt;br /&gt;
 simpleNavbar()メソッドの第3引数が「$this-&gt;request-&gt;params[&#39;action&#39;]」となってますが、これは現在のurlからアクションに当たる文字列を格納しています。この値を渡すことでどこのliタグがactiveなのかを判断してます。
&lt;/p&gt;


&lt;h5&gt;まとめ&lt;/h5&gt;
&lt;p&gt;
 &lt;ul&gt;
  &lt;li&gt;美優さんことViewには助っ人ことHelperという仕組みがある。&lt;/li&gt;
  &lt;li&gt;Helperを使うには色々と決まりがある。&lt;/li&gt;
  &lt;li&gt;変数の中身がわからない場合はdebug()メソッドを使う&lt;/li&gt;
 &lt;/ul&gt;
&lt;/p&gt;

&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;p&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.0&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;Macmini&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2012/07/cakephptwitter-bootstrap3.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguCUrfRX1TKo4EnWkOZ4Y0auWHJmFW4gHfL0tmhoyVoqOv00ni-Ntxzv7Axbvex4A8LVx2nVnMxm75JPiVLm9B5-_VnMo1Z8NDBtF0B5oHp3wz5uLarFOG9V_Eq6DqB7G_8omWE8mYxI/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-27+18.32.34.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-3762722785729244845</guid><pubDate>Fri, 27 Jul 2012 12:00:00 +0000</pubDate><atom:updated>2012-07-27T23:41:34.036+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title></title><description>&lt;p&gt;最近4歳の娘がスギちゃんのモノマネをします。何度注意しても「ワイルドだよ~」になります。&lt;/p&gt;
&lt;h4&gt;Viewの概要&lt;/h4&gt;
&lt;h5&gt;Viewの仕組み&lt;/h5&gt;
&lt;p&gt;
CakephpのViewは表示を担当する人です。多分日本名は美優さんです。Controllerさんからいろんな値を渡されて、その値を美優さんが一生懸命頑張って表示します。美優さんは最終的にはhtmlやXml等の文字列を返すのが責任範囲です。&lt;br&gt;
美優さんは自分の仕事がしやすい様に扱う大きさにで整理しています。下の表でhtmlの時を例に説明します。&lt;br&gt;
&lt;table&gt;
 &lt;tr&gt;
  &lt;th&gt;名前&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;layout&lt;/td&gt;&lt;td&gt;一番大きな枠組みで、複数のURLにアクセスした時の共通部分です。後でビューや(時々エレメント）を差し込めるように作成しておきます。例）htmlタグ、headタグ、bodyタグの一部、グローバルナビとかを記述しておきます。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;view&lt;/td&gt;&lt;td&gt;中位の枠組みで、アクセスするURL毎に表示する内容が替わる部分です。後でエレメントを差し込めるようにもできます。例）bodyタグの主要な部分を記述しておきます。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;element&lt;/td&gt;&lt;td&gt;一番小さな枠組みで、layoutやview、果ては他のelement内で再利用可能なわりかし小さなパーツ。例）ログイン状態を表示するdivタグとか&lt;/td&gt;
 &lt;/tr&gt; 
&lt;/table&gt;
美優さんは他にもblockとかthemeとはhelperという隠し玉を持ってますが、ややこしいので後回しです。
&lt;/p&gt;
&lt;h5&gt;レイアウトを試す&lt;/h5&gt;
&lt;p&gt;早速レイアウトを試してみます。レイアウトは「app/View/Layout」フォルダに入れます。元々デフォルトでそのまま「default.ctp」ってのがあります。&lt;br&gt;
ちなみにCakephpではViewの関連のファイルの拡張子は「.ctp」(CakePHP Templateの略らしい)です。&lt;br&gt;
その「default.ctp」を参考に「guest.ctp」というレイアウトを作ります。&lt;br /&gt;
&lt;pre&gt;app/View/Layout/guest.ctpを新たに作成。&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;?php echo $this-&amp;gt;Html-&amp;gt;charset(); ?&amp;gt;*1&lt;br /&gt;
 &amp;lt;title&amp;gt;&lt;br /&gt;
  Twitter Bootstrap 2.0.4コピペ場 : &amp;lt;?php echo $title_for_layout; ?&amp;gt;*2&lt;br /&gt;
 &amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  echo $this-&amp;gt;Html-&amp;gt;meta(&#39;icon&#39;);*3&lt;br /&gt;
&lt;br /&gt;
  echo $this-&amp;gt;Html-&amp;gt;css(&#39;&#39;);*4&lt;br /&gt;
&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;meta&#39;);*5&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;css&#39;);*6&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;script&#39;);*7&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&quot;container&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;header&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;h1&amp;gt;Twitter Bootstrap 2.0.4コピペ場&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;content&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php echo $this-&amp;gt;fetch(&#39;content&#39;); ?&amp;gt;*8&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;footer&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;copyright busyoumono99 2012&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
 &lt;/code&gt;
&lt;/div&gt;
guest.ctpではどのURLでも表示する内容を記述しています。headタグやヘッダー、フッター等です。あと所々にphpでechoしているのは下で軽く説明しています。
&lt;ul&gt;
 &lt;li&gt;*1：キャラセットを指定します。この場合UTF-8です。ちなみにCakephpはutf8が基本らしいです。&lt;/li&gt;
 &lt;li&gt;*2：htmlのタイトルを表示します。controllerやviewで設定しないとコントローラ名がデフォルトで表示されるようです。&lt;/li&gt;
 &lt;li&gt;*3：ファビコンの指定をします。&lt;/li&gt;
 &lt;li&gt;*4：cssの指定をします。今は空です。&lt;/li&gt;
 &lt;li&gt;*5：設定されているメタタグがあれば表示します。&lt;/li&gt;
 &lt;li&gt;*6：設定されているCSSがあれば表示します。*4とかぶるような気がしますがdefault.ctpでもこうなってたのでこのまま行きます。後で調べる。&lt;/li&gt;
 &lt;li&gt;*7：設定されているjavascriptを表示します。&lt;/li&gt;
 &lt;li&gt;*8：viewがここで表示されます。今だったら「index.ctp」の中身がここで表示されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h5&gt;viewの中でレイアウトの設定をする。&lt;/h5&gt;
&lt;p&gt;レイアウトを作ってもそのままでは美優さんはレイアウトを利用してくれません。取り敢えずここでは「index.ctp」の中で設定してみます。
&lt;pre&gt;app/View/Pages/index.ctpを変更&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
&amp;lt;?php &lt;br&gt;
$this-&amp;gt;layout = &quot;guest&quot;;&lt;br&gt;
?&amp;gt;&lt;br&gt;
Hello World!
 &lt;/code&gt;
&lt;/div&gt;
これでまたブラウザで「dream-travel.boo.jp/twitter_bootstrap_2.0.4/」にアクセスしやす&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_jdFawNXYFhPflPQavYc0dbAhyphenhyphenr20x58r565MIbHzI7Ln9mptrT0BaBepJcxGOLmjrAeI3KAuPdUNweD1_EkDYfTU0_Y_eBStmoKNuRbvMVKch3A34cDKEFD4Akih1oru8m-0FyMz8Bg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+14.12.37.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;126&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_jdFawNXYFhPflPQavYc0dbAhyphenhyphenr20x58r565MIbHzI7Ln9mptrT0BaBepJcxGOLmjrAeI3KAuPdUNweD1_EkDYfTU0_Y_eBStmoKNuRbvMVKch3A34cDKEFD4Akih1oru8m-0FyMz8Bg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+14.12.37.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;

Cakephpのデフォルトでは無いデザインが適用されました。なんかNote(8)とか出てますが、*4で空にしたのが原因なので気にしない。&lt;/p&gt;
&lt;h4&gt;Twitter Bootstrapの導入&lt;/h4&gt;
&lt;h5&gt;Bootstrapの準備&lt;/h5&gt;
&lt;p&gt;ここからCakephpにBootstrapを取り込みます。&lt;a href=&quot;http://twitter.github.com/bootstrap/index.html&quot;&gt;BootstrapのHP&lt;/a&gt;からダウンロードしてきます。
ダウンロードしたファイルを解凍して以下のようにファイルを配置します。&lt;br&gt;
app/webroot/css
&lt;ul&gt;
 &lt;li&gt;bootstrap-responsive.min.css&lt;/li&gt;
 &lt;li&gt;bootstrap.min.css&lt;/li&gt;
&lt;/ul&gt;
app/webroot/img
&lt;ul&gt;
 &lt;li&gt;glyphicons-halflings-white.png&lt;/li&gt;
 &lt;li&gt;glyphicons-halflings.png&lt;/li&gt;
&lt;/ul&gt;
app/webroot/js
&lt;ul&gt;
 &lt;li&gt;bootstrap.min.js&lt;/li&gt;
&lt;/ul&gt;
多分下のような見え方になってるとおもいます。&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivmWbtIQOLqu7P1vZznTQ0H4m5PhWSXc_VVSXUaJUKsYNDFqwrWUIu9q0fHtrI90fJ_atFWTNk9rUl9tPVPav2woAKopN1GiFQ9HKjwWu4HTDbtEqdLEpyB1-Fw1ibWn6Kt8_GtGHhIH4/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+14.29.08.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;318&quot; width=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivmWbtIQOLqu7P1vZznTQ0H4m5PhWSXc_VVSXUaJUKsYNDFqwrWUIu9q0fHtrI90fJ_atFWTNk9rUl9tPVPav2woAKopN1GiFQ9HKjwWu4HTDbtEqdLEpyB1-Fw1ibWn6Kt8_GtGHhIH4/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+14.29.08.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h5&gt;Bootstrap用にファイルを修正&lt;/h5&gt;
&lt;p&gt;Bootstrapのデザインを適応するようにguest.ctpを修正します。今度は&lt;a href=&quot;http://twitter.github.com/bootstrap/examples/starter-template.html&quot;&gt;Bootstrapのサンプルページ&lt;/a&gt;を
元に作ってみる&lt;br /&gt;
&lt;pre&gt;app/View/Layout/guest.ctpを修正&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
&amp;lt;?php&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&quot;ja&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;?php echo $this-&amp;gt;Html-&amp;gt;charset(); ?&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Twitter Bootstrap 2.0.4コピペ場 : &amp;lt;?php echo $title_for_layout; ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
  echo $this-&amp;gt;Html-&amp;gt;meta(&#39;icon&#39;) . &quot;\n&quot;;&lt;br /&gt;
  echo $this-&amp;gt;Html-&amp;gt;css(array(&#39;bootstrap.min&#39;,&#39;bootstrap-responsive.min&#39;)) . &quot;\n&quot;;&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;meta&#39;) . &quot;\n&quot;;&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;css&#39;) . &quot;\n&quot;;&lt;br /&gt;
  echo $this-&amp;gt;fetch(&#39;script&#39;) . &quot;\n&quot;;&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div class=&quot;container&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;header&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;h1&amp;gt;Twitter Bootstrap 2.0.4コピペ場&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;content&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;?php echo $this-&amp;gt;fetch(&#39;content&#39;); ?&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&quot;footer&quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;copyright busyoumono99 2012&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&quot;js/bootstrap.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
 &lt;/code&gt;
&lt;/div&gt;
cssを複数指定したい場合は上の用にarray()で渡します。&lt;br /&gt;
ついでにBootstrapが反映されているか分かるようにindex.ctpも編集してみる。
&lt;pre&gt;app/View/Pages/index.ctpを変更&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
&amp;lt;?php &lt;br&gt;
$this-&gt;layout = &quot;guest&quot;;&lt;br&gt;
?&amp;gt;&lt;br&gt;
&amp;lt;div class=&quot;row&quot;&amp;gt;&lt;br&gt;
 &amp;lt;div class=&quot;span3&quot;&amp;gt;サイド&amp;lt;/div&amp;gt;&lt;br&gt;
 &amp;lt;div class=&quot;span9&quot;&amp;gt;Hello World!&amp;lt;/div&amp;gt;&lt;br&gt;
&amp;lt;/div&amp;gt;&lt;br&gt;
 &lt;/code&gt;
&lt;/div&gt;
これで再度ブラウザでアクセスすると&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtjop87QO_-VxnZIXZ4BprAAUxjK2RMoANol3ZpIG2PNOE7kv6Ms76Z_rGZU-DXrgd1cGXomwoMAzwnlk1nNdp9xovjYiaP0QD-5ldB8tPBH0XHM8kPAQBSDC8fKpBoGrMhhi6RG8LUSU/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+15.25.39.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;52&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtjop87QO_-VxnZIXZ4BprAAUxjK2RMoANol3ZpIG2PNOE7kv6Ms76Z_rGZU-DXrgd1cGXomwoMAzwnlk1nNdp9xovjYiaP0QD-5ldB8tPBH0XHM8kPAQBSDC8fKpBoGrMhhi6RG8LUSU/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+15.25.39.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
 OKっぽい。
&lt;/p&gt;
&lt;h5&gt;まとめ&lt;/h5&gt;
&lt;p&gt;
 &lt;ul&gt;
  &lt;li&gt;美優さんには色々機能がある。&lt;/li&gt;
  &lt;li&gt;レイアウト使うと便利&lt;/li&gt;
 &lt;/ul&gt;
&lt;/p&gt;

&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;p&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.0&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;Macmini&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2012/07/4-view-view-cakephpviewcontrollerhtmlxm.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_jdFawNXYFhPflPQavYc0dbAhyphenhyphenr20x58r565MIbHzI7Ln9mptrT0BaBepJcxGOLmjrAeI3KAuPdUNweD1_EkDYfTU0_Y_eBStmoKNuRbvMVKch3A34cDKEFD4Akih1oru8m-0FyMz8Bg/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-26+14.12.37.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-4983487336537568084</guid><pubDate>Thu, 26 Jul 2012 12:00:00 +0000</pubDate><atom:updated>2012-07-25T16:17:48.752+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CakePHP</category><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>CakephpでTwitter bootstrapのサンプルサイトを作る。その1</title><description>&lt;h5&gt;ウラシマ&lt;/h5&gt;
&lt;p&gt;Cakephpからしばらく離れていたらいつの間にか1.3から2.2になっていた。新しいCakephpになれる意味でも何かサイト作ろうかなと思った次第です。&lt;br&gt;
よくあるブログ記事だとデータベース使った説明が入るのでしょうけど、覚える事が多いと挫折するので、まあ最初は静的Webサイトを作ればコントローラとビュー周りは分かるかなと思った次第です。&lt;br&gt;
&lt;/p&gt;
&lt;h5&gt;BootStrapのサイト&lt;/h5&gt;
&lt;p&gt;いいネタ無いかなと悩んでたらひらめきました。以前の記事で紹介したbootstrapのサイトも良いのですが、ちと自分に向いてないというのも
&lt;ul&gt;
 &lt;li&gt;現状のVerでない&lt;/li&gt;
 &lt;li&gt;コピペ用のサンプルがスペースでインデントしてある&lt;/li&gt;
&lt;/ul&gt;
そしたら自分で作るべ。Cakephpで！！
&lt;/p&gt;

&lt;h5&gt;準備&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;http://book.cakephp.org/2.0/ja/getting-started.html&quot;&gt;日本語のcookbook&lt;/a&gt;見ながらインストールは完了。&lt;br&gt;
今回は色々訳あって「dream-travel.boo.jp/twitter_bootstrap_2.0.4」というフォルダ構成にした。早速ブラウザで「dream-travel.boo.jp/twitter_bootstrap_2.0.4/」にアクセスする。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX8K0QioEHWFfQrgVMonddQ2wPdItPRRopGaDgL2ELhuqcdmuzNb36lEI9iU4TmOaU6bGQ5KlnpYvnXPDo0il3tal8WZ4zMRf3DdzGOBbFf9X3VcQvuXBF63MiAJlI9kawhs9GdKoSSQ0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+14.24.28.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;215&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX8K0QioEHWFfQrgVMonddQ2wPdItPRRopGaDgL2ELhuqcdmuzNb36lEI9iU4TmOaU6bGQ5KlnpYvnXPDo0il3tal8WZ4zMRf3DdzGOBbFf9X3VcQvuXBF63MiAJlI9kawhs9GdKoSSQ0/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+14.24.28.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;
おお！何かおしゃれになっている！&lt;br&gt;
変なとこに感激しつついつもの画面が出てきて安心する。&lt;br&gt;
エラーメッセージを消す為に以下を修正。&lt;br&gt;
&lt;pre&gt;/app/Config/core.php&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
Configure::write(&#39;Security.salt&#39;, &#39;DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi&#39;);&lt;br&gt;
...&lt;br&gt;
Configure::write(&#39;Security.cipherSeed&#39;, &#39;76859309657453542496749683645&#39;);
 &lt;/code&gt;
&lt;/div&gt;
上記はデフォルト値なので、第2引数の値を適当に変更してから再度ブラウザでアクセスする。&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8Tb12wRdL8Og3Es_KyTChoCYhSZVhhr7GPl7ePWv-eixmpspEKvAShsSqy4Lg1HdR5LUpsrTNxFCfNlntcLpVvxydwnPZBErdg0N4GIBn0CylYvC9IUB__qusX3_Q4SykMVjTOj0avHI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.20.52.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8Tb12wRdL8Og3Es_KyTChoCYhSZVhhr7GPl7ePWv-eixmpspEKvAShsSqy4Lg1HdR5LUpsrTNxFCfNlntcLpVvxydwnPZBErdg0N4GIBn0CylYvC9IUB__qusX3_Q4SykMVjTOj0avHI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.20.52.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;
オッケー！赤いの消えた。&lt;br&gt;
黄色のメッセージはデータベースの設定ファイルが無いという事ですが、今回データベース使わないので無視。&lt;br&gt;
次にurlのルーティングを変更する。デフォルトのままだとurlが「/」の時「PagesController」の「display」メソッドを実行して「home.ctp」
を表示するという設定になっているのでこれを変更する。&lt;br&gt;
&lt;pre&gt;/app/Config/routes.php&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
Router::connect(&#39;/&#39;, array(&#39;controller&#39; =&gt; &#39;pages&#39;, &#39;action&#39; =&gt; &#39;display&#39;, &#39;home&#39;));&lt;br&gt;
↓&lt;br&gt;
Router::connect(&#39;/&#39;, array(&#39;controller&#39; =&gt; &#39;pages&#39;, &#39;action&#39; =&gt; &#39;index&#39;));
 &lt;/code&gt;
&lt;/div&gt;
また、ブラウザでアクセスする。&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPEvGtgxsQDXQeKbcoce4oPFb2HSqtIEbyXEWnblVBHbm3Y5oRqBcZI4JyaH-KbxrzE_aSccALCkn8oVqrZzFZdYQ9-O0-xIDtwVABQ4rZxtQfnMoLYlGoYPMYuKxI0YPgZe3DM1NkKQI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.34.08.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPEvGtgxsQDXQeKbcoce4oPFb2HSqtIEbyXEWnblVBHbm3Y5oRqBcZI4JyaH-KbxrzE_aSccALCkn8oVqrZzFZdYQ9-O0-xIDtwVABQ4rZxtQfnMoLYlGoYPMYuKxI0YPgZe3DM1NkKQI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.34.08.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;
Cakephpさんに怒られた。(´・ω・｀)&lt;br&gt;
取り敢えず「routes.php」の修正は成功で、今度のエラーメッセージはアクションの「index()」メソッドがねーよ！という内容。
&lt;/p&gt;
&lt;h5&gt;プログラマのサガ&lt;/h5&gt;
&lt;p&gt;無性に挨拶したくなって来ませんか？わたしは挨拶したくなりました。&lt;br&gt;
そんなわけで以下を編集。
&lt;pre&gt;/app/Controller/PagesController.phpに以下を追加&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
...&lt;br&gt;
&lt;br&gt;
public function index(){&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
...&lt;br&gt;
 &lt;/code&gt;
&lt;/div&gt;
&lt;pre&gt;/app/View/Pages/index.ctpファイルを新たに作成。&lt;/pre&gt;
&lt;div class=&quot;code-container&quot;&gt;
 &lt;code&gt;
&amp;lt;?php&lt;br&gt;
?&amp;gt;&lt;br&gt;
Hello World!
&lt;/div&gt;
またブラウザでアクセスする。&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9z4qFrcvSH3HZPHfQhiuCwerM_MkPrFLbzHUf5zevl3gVPe3HwPKLL_mGo9FpOr5TZNO1JMJbXBwP52bHAV4xW33gYO_c1jLebNEH9eE0dqdgy1QdGHfTnVa0cf68dRS1Fus6fCzgP8I/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.47.32.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;122&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9z4qFrcvSH3HZPHfQhiuCwerM_MkPrFLbzHUf5zevl3gVPe3HwPKLL_mGo9FpOr5TZNO1JMJbXBwP52bHAV4xW33gYO_c1jLebNEH9eE0dqdgy1QdGHfTnVa0cf68dRS1Fus6fCzgP8I/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.47.32.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;
「Hello World！」が出た！と思ったらまたCakephpさんに怒られたorz。&lt;br&gt;
内容はさっき無視した「データベースの設定ファイルが無い」って奴。しょうがないので修正する。
&lt;ul&gt;
 &lt;li&gt;app/Config/database.php.defaultをコピー&lt;/li&gt;
 &lt;li&gt;同じ場所に「datebase.php」で貼り付け。&lt;/li&gt;
&lt;/ul&gt;
内容は変更せずにそのままでOK...なはず。またブラウザでアクセスする。&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHMASaSEjnJjVE5HJuVi0dz6qqnWsXgvsW0Nk28TXKcbKFr9Vtry0CdRbFjDXME-3EFAzLZxmpaDjQrwFaDmQyMVbKUoLjsOpnY_ohTd2QesFvJqvjlE_Fc759oeS3Pr2D2hsbv0PzrZk/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.55.40.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;130&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHMASaSEjnJjVE5HJuVi0dz6qqnWsXgvsW0Nk28TXKcbKFr9Vtry0CdRbFjDXME-3EFAzLZxmpaDjQrwFaDmQyMVbKUoLjsOpnY_ohTd2QesFvJqvjlE_Fc759oeS3Pr2D2hsbv0PzrZk/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+15.55.40.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;
今度こそOK。
&lt;/p&gt;
&lt;h5&gt;まとめ&lt;/h5&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;core.phpでセキュリティ関係のデフォルト値を2箇所変更する&lt;/li&gt;
&lt;li&gt;データベースの設定ファイルのdatebase.phpはさっさと作る&lt;/li&gt;
&lt;li&gt;routes.phpでホームurlの設定を変更する&lt;/li&gt;
&lt;li&gt;Pagesコントローラクラスにindexメソッドを追加&lt;/li&gt;
&lt;li&gt;View/Pagesフォルダにindex.ctpを作成&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h5&gt;環境とか&lt;/h5&gt;
&lt;table class=&quot;table&quot;&gt;
&lt;thead&gt;
 &lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;PHPフレームワーク&lt;/td&gt;&lt;td&gt;Cakephp 2.2.0&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;IDE&lt;/td&gt;&lt;td&gt;Eclipse 3.6&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;開発環境?&lt;/td&gt;&lt;td&gt;MAMP&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;PC&lt;/td&gt;&lt;td&gt;Macmini&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Mac OS Lion&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><link>http://fusyomono1.blogspot.com/2012/07/cakephp1.html</link><author>noreply@blogger.com (busyomono99)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX8K0QioEHWFfQrgVMonddQ2wPdItPRRopGaDgL2ELhuqcdmuzNb36lEI9iU4TmOaU6bGQ5KlnpYvnXPDo0il3tal8WZ4zMRf3DdzGOBbFf9X3VcQvuXBF63MiAJlI9kawhs9GdKoSSQ0/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2012-07-25+14.24.28.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-2549446346321837945</guid><pubDate>Wed, 25 Jul 2012 02:31:00 +0000</pubDate><atom:updated>2012-07-25T11:31:57.889+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Twitter Bootstrap</category><title>CSSフレームワークのTwitter Bootstarpを調べる</title><description>結論から言うと大分良い。&lt;br&gt;
&lt;br&gt;
&lt;h5&gt;参考にしたサイト&lt;/h5&gt;
&lt;ul&gt;
 &lt;li&gt;
  &lt;a href=&quot;http://d.hatena.ne.jp/replication/20120226/1330224012&quot;&gt;これからTwitter Bootstrapをはじめる人のためのエントリまとめ&lt;/a&gt;
 &lt;/li&gt;
 &lt;li&gt;
  &lt;a href=&quot;http://greenapple-room.com/conc/user/TwitterBootstrap/bootstrap.html&quot;&gt;Twitter Bootstrapの使い方&lt;/a&gt;
 &lt;/li&gt;
 &lt;li&gt;
  &lt;a href=&quot;http://dotinstall.com/lessons/basic_twitter_bootstrap_v2&quot;&gt;ドットインストールのbootstrap講座&lt;/a&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h5&gt;気付いた注意点1つ&lt;/h5&gt;
&lt;P&gt;
 レスポンシブデザインを導入すると、スマートフォンやタブレットにも対応します。で以下のlinkタグ貼り付けるのですが、
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;code&gt;&amp;lt;link href=&quot;css/bootstrap-responsive.min.css&quot; rel=&quot;stylesheet&quot;&amp;gt;&lt;/code&gt;
 &lt;/div&gt;
 これ以外にも
 &lt;div class=&quot;code-container&quot;&gt;
  &lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;&lt;/code&gt;
 &lt;/div&gt;
 を追加しないと、PC上でブラウザでの幅を狭くして見た時にはスマートフォン用のデザインになるのですが、実際にスマートフォンで見るとPC用のデザインのままです。
&lt;/P&gt;
&lt;p&gt;
 その他の使い方は上のURLで良くわかります。ではでは。
&lt;/p&gt;</description><link>http://fusyomono1.blogspot.com/2012/07/csstwitter-bootstarp.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-1947980609925104236</guid><pubDate>Wed, 25 Jul 2012 02:00:00 +0000</pubDate><atom:updated>2012-07-25T11:00:45.620+09:00</atom:updated><title></title><description>会社でSymfony使う予定だったのが中止になり、その後C++とQtとjavaとspringframworkを扱う案件でてんやわんやしてました。&lt;br&gt;
最近また落ち着いて来たのでまたCakephpを唐突にいじりだす。その前にtwitter bootstrapの勉強。</description><link>http://fusyomono1.blogspot.com/2012/07/blog-post.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-8554712888040877057</guid><pubDate>Mon, 07 Nov 2011 14:41:00 +0000</pubDate><atom:updated>2011-11-07T23:56:07.291+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">symfony2</category><title>[symfony2]ユーザーとかのフォームとかコントローラーとか</title><description>少し間が開きましたが、認証関連のフォームを作ってみました。&lt;br /&gt;
&lt;br /&gt;
&lt;h5&gt;1.UserとRoleのフォームを作る&lt;/h5&gt;それぞれ以下のコマンドを実行します。&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;php app/console doctrine:generate:crud --entity=AcmeSecurityBundle:User --route-prefix=AcmeSecrityBundle_user --with-write&lt;br /&gt;
php app/console doctrine:generate:crud --entity=AcmeSecurityBundle:Role --route-prefix=AcmeSecrityBundle_role --with-write&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;「doctrine:generate:crud」は指定したエンティティに対して、新規追加、一覧、編集、詳細のフォームを作るコマンドみたいです。&lt;br /&gt;
--entity　作成するフォームのエンティティを指定&lt;br /&gt;
--route-prefix　ルーターの接頭辞&lt;br /&gt;
--with-write　一緒にnewとdeleteアクションを作ってくれる？&lt;br /&gt;
フォーマットの指定はアノテーションでやりました。&lt;br /&gt;
&lt;br /&gt;
するとsymfonyが自動で入力フォームをサクッと作ってくれました。&lt;br /&gt;
できたものを確認すると、多分以下ファイルが出来てました。&lt;br /&gt;
&lt;blockquote&gt;src/Acme/SecurityBundle/Controller/UserController.php&lt;br /&gt;
src/Acme/SecurityBundle/Form/UserType.php&lt;br /&gt;
src/Acme/SecurityBundle/Resources/views/User/edit.html.twig&lt;br /&gt;
src/Acme/SecurityBundle/Resources/views/User/index.html.twig&lt;br /&gt;
src/Acme/SecurityBundle/Resources/views/User/new.html.twig&lt;br /&gt;
src/Acme/SecurityBundle/Resources/views/User/show.html.twig&lt;br /&gt;
&lt;/blockquote&gt;＊Roleも同じものが出来てました。&lt;br /&gt;
&lt;br /&gt;
早速ブラウザで「ect.com/web/app_dev.php/user/」にアクセスすると一覧が出てました。&lt;br /&gt;
&lt;h5&gt;2.Role.phpの改造&lt;/h5&gt;そのまま新規追加してみようと思いまして、新規追加するリンクをクリックしたらエラーが出ました。&lt;br /&gt;
Roleエンティティに__toString()メソッドを作ってくれない？みたいな感じです。&lt;br /&gt;
多分ユーザーの権限の入力フォームがselectタグで、そこに表示する用の文字列を吐き出せば良いかなと当たりをつけて以下のコードを追加してみました。&lt;br /&gt;
#　src/Acme/SecurityBundle/Entity/Role.php&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;public function __tostring()&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return $this-&gt;name;&lt;br /&gt;
&amp;nbsp;}&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;再読込みをしてみると無事表示されました。&lt;br /&gt;
&lt;br /&gt;
&lt;h5&gt;3.パスワードをハッシュ化する用のユーティリティクラス&lt;/h5&gt;このままだと、パスワードは平文のままデータベースに保存されます。それだと色々とまずいのでハッシュ化する機能を追加する。&lt;br /&gt;
パスワードをハッシュ化するようなユーティリティクラスを作る。前に&lt;a href=&quot;http://fusyomono1.blogspot.com/2011/11/symfony2request.html&quot;&gt;機能拡張した時&lt;/a&gt;のコメントと日本symfonyユーザー会の&lt;a href=&quot;http://docs.symfony.gr.jp/symfony2/book/security.html#id21&quot;&gt;セキュリティ　パスワードのエンコード&lt;/a&gt;を参考に以下の様に作ってみました。新しくUtilディレクトリを作って、クラス名はまあ適当な感じです。&lt;br /&gt;
#　src/Acme/SecurityBundle/Util/PasswordUtil.php&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;namespace Acme\SecurityBundle\Util;&lt;br /&gt;
&lt;br /&gt;
class PasswordUtil&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;/**&lt;br /&gt;
&amp;nbsp; *&lt;br /&gt;
&amp;nbsp; * パスワードをハッシュ化する一連の処理を行う。&lt;br /&gt;
&amp;nbsp; * @param From $form&lt;br /&gt;
&amp;nbsp; * @param Controller $controller&lt;br /&gt;
&amp;nbsp; * @return Form $form&lt;br /&gt;
&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;public static function encodePasswordUtil($form, $controller)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//まず下準備&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$factory = $controller-&gt;get(&#39;security.encoder_factory&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//$formからエンティティを取り出す&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$data = $form-&gt;getData();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//下準備2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$encoder = $factory-&gt;getEncoder($data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//パスワードをハッシュ値にする&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$hashedPassword = $encoder-&gt;encodePassword($data-&gt;getPassword(), $data-&gt;getSalt());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//エンティティにハッシュ化したパスワードをセットする。&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$data-&gt;setPassword($hashedPassword);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;//$formにエンティティをセットする&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$form-&gt;setData($data);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return $form;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;// 文字列がハッシュか確認する。&lt;br /&gt;
&amp;nbsp;// @param $password フォームの内容が入っているリクエスト。&lt;br /&gt;
&amp;nbsp;// @return bool 長さ40で英数字の場合はtrue&lt;br /&gt;
&amp;nbsp;public static function isHashUtil($password)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$pattern = &#39;/[a-zA-z0-9]{40}/i&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(strlen($password)===40 &amp;&amp; preg_match($pattern, $password)){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}else{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;4.パスワードをハッシュ化するために変更したユーザーコントローラー&lt;/h5&gt;続いてユーザーコントローラー&lt;br /&gt;
#　src/Acme/SecurityBundle/Controller/UserController.php&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
use Acme\SecurityBundle\Util\PasswordUtil;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* User controller.&lt;br /&gt;
*&lt;br /&gt;
* @Route(&quot;/admin/user&quot;)&lt;br /&gt;
*/&lt;br /&gt;
class UserController extends Controller&lt;br /&gt;
{&lt;br /&gt;
....&lt;br /&gt;
&amp;nbsp;/**&lt;br /&gt;
&amp;nbsp; * Creates a new User entity.&lt;br /&gt;
&amp;nbsp; *&lt;br /&gt;
&amp;nbsp; * @Route(&quot;/create&quot;, name=&quot;AcmeSecurityBundle_user_create&quot;)&lt;br /&gt;
&amp;nbsp; * @Method(&quot;post&quot;)&lt;br /&gt;
&amp;nbsp; * @Template(&quot;AcmeSecurityBundle:User:new.html.twig&quot;)&lt;br /&gt;
&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;public function createAction()&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$entity  = new User();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$request = $this-&gt;getRequest();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$form&amp;nbsp;= $this-&gt;createForm(new UserType(), $entity);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$form-&gt;bindRequest($request);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if ($form-&gt;isValid()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;//パスワードをハッシュ化した$formを取得&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$form = PasswordUtil::encodePasswordUtil($form, $this);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$em = $this-&gt;getDoctrine()-&gt;getEntityManager();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$em-&gt;persist($entity);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$em-&gt;flush();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;return $this-&gt;redirect($this-&gt;generateUrl(&#39;AcmeSecurityBundle_user_show&#39;, array(&#39;id&#39; =&gt; $entity-&gt;getId())));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return array(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;entity&#39; =&gt; $entity,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;form&#39;   =&gt; $form-&gt;createView()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;);&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
...&lt;br /&gt;
&amp;nbsp;/**&lt;br /&gt;
&amp;nbsp; * Edits an existing User entity.&lt;br /&gt;
&amp;nbsp; *&lt;br /&gt;
&amp;nbsp; * @Route(&quot;/{id}/update&quot;, name=&quot;AcmeSecurityBundle_user_update&quot;)&lt;br /&gt;
&amp;nbsp; * @Method(&quot;post&quot;)&lt;br /&gt;
&amp;nbsp; * @Template(&quot;AcmeSecurityBundle:User:edit.html.twig&quot;)&lt;br /&gt;
&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;public function updateAction($id)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$em = $this-&gt;getDoctrine()-&gt;getEntityManager();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$entity = $em-&gt;getRepository(&#39;AcmeSecurityBundle:User&#39;)-&gt;find($id);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if (!$entity) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;throw $this-&gt;createNotFoundException(&#39;Unable to find User entity.&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$editForm   = $this-&gt;createForm(new UserType(), $entity);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$deleteForm = $this-&gt;createDeleteForm($id);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$request = $this-&gt;getRequest();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$editForm-&gt;bindRequest($request);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if ($editForm-&gt;isValid()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;//パスワードがハッシュ値ならそのままupdate、&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;//ハッシュ値で無ければ恐らく変更があったということなので、ハッシュ化してupdate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;//そんな訳で取り敢えずフォームのパスワードを取得&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$data = $editForm-&gt;getData();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$password = $data-&gt;getPassword();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;//パスワードがハッシュ化されているか調べる&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!PasswordUtil::isHashUtil($password)){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//パスワードをハッシュ化したFormを受け取る&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$editForm = PasswordUtil::encodePasswordUtil($editForm, $this);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$em-&gt;persist($entity);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$em-&gt;flush();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;return $this-&gt;redirect($this-&gt;generateUrl(&#39;AcmeSecurityBundle_user_edit&#39;, array(&#39;id&#39; =&gt; $id)));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return array(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;entity&#39;&amp;nbsp;  =&gt; $entity,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;edit_form&#39;   =&gt; $editForm-&gt;createView(),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;delete_form&#39; =&gt; $deleteForm-&gt;createView(),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;);&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;5.ちょっとした解説&lt;/h5&gt;PasswordUtil::encodePasswordUtil()関数の引数$formはUserコントローラー内で出てくる以下の2つみたいなヤツです。&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;$form = $this-&gt;createForm(new UserType(), $entity);&lt;br /&gt;
$editForm = $this-&gt;createForm(new UserType(), $entity);&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;もう一つの引数$controllerはUserコントローラー自身($this)です。&lt;br /&gt;
PasswordUtil::encodePasswordUtil()関数の流れを少し説明すると、「$data = $form-&gt;getData();」でエンティティが取得できます。つまりUser.phpです。なので「$data-&gt;getPassword()」とか「$data-&gt;getSalt()」でフォームに入力された値が取得できます。&lt;br /&gt;
これを順調にハッシュ化していって、「$form-&gt;setData($data);」でフォームに設定し直して返します。&lt;br /&gt;
&lt;br /&gt;
もう一つのPasswordUtil::isHashUtil()関数はupdateアクションの時に利用しています。ハッシュ値がどうかを検証してます。&lt;br /&gt;
&lt;br /&gt;
UserControllerは自動で出来たコードから変更した箇所は&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;use Acme\SecurityBundle\Util\PasswordUtil;を追加&lt;/li&gt;
&lt;li&gt;createAction()にパスワードがハッシュ化するように色々追加&lt;/li&gt;
&lt;li&gt;updateAction()にフォームのパスワードがハッシュ値ではない場合にハッシュ化する処理を色々と追加&lt;/li&gt;
&lt;/ol&gt;updateAction()の方法はあまり良くないですが、一応これでおいておく。&lt;br /&gt;
これでひと通りはOKかなと思います。&lt;br /&gt;
&lt;br /&gt;
次はフォームの表示を変更していく予定です。</description><link>http://fusyomono1.blogspot.com/2011/11/symfony2_07.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7188801596800194629.post-7223710424726462883</guid><pubDate>Sun, 06 Nov 2011 11:56:00 +0000</pubDate><atom:updated>2011-11-07T20:22:03.883+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mac</category><category domain="http://www.blogger.com/atom/ns#">symfony2</category><title>[symfony2][mac]データベース関連のコンソールでエラー</title><description>普段は会社でしかsymfony2をいじってなかったのだが、散々遅れたので家のmacでよやろうと思ったらsymfonyのコンソールでエラーが出ました。&lt;br /&gt;
&lt;br /&gt;
コンソールで実行したコマンドは&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;php app/console doctrine:schema:update --force &lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
出てきたエラーは&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt; [PDOException]&lt;br /&gt;
SQLSTATE[HY000] [2002] No such file or directory&lt;br /&gt;
[ErrorException]&lt;br /&gt;
Warning: PDO::__construct(): [2002] No such file or directory&lt;br /&gt;
(trying to connect via unix:///var/mysql/mysql.sock) in /Applications/&lt;br /&gt;
MAMP/htdocs/ext/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/&lt;br /&gt;
PDOConnection.php line 36 &lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;でした。どうして良いか分からず途方に暮れてましたが、以前に「googleグループの日本symfonyユーザー会に気軽に質問して下さい。」とメールを頂いていたのでディスカッションに投稿してみました。ものの15分ぐらいで返信ありました。感謝感謝。&lt;br /&gt;
&lt;br /&gt;
その投稿を引用すると&lt;br /&gt;
&lt;blockquote&gt;...&lt;br /&gt;
エラーを見るに、UNIXソケットを利用してMySQLの接続を行おうとして、&lt;br /&gt;
接続に失敗しているものと思われます。&lt;br /&gt;
&lt;br /&gt;
http://jp2.php.net/manual/ja/ref.pdo-mysql.connection.php&lt;br /&gt;
&lt;br /&gt;
app/config/config.yml にてUNIXソケットの指定をすれば接続できるかと思います。&lt;br /&gt;
設定については下記のドキュメントを参考にしてください。&lt;br /&gt;
# unix_socket という項目名です&lt;br /&gt;
&lt;br /&gt;
http://symfony.com/doc/2.0/reference/configuration/doctrine.html&lt;br /&gt;
...&lt;/blockquote&gt;との事でした。&lt;br /&gt;
&lt;br /&gt;
早速リンク先の&lt;a href=&quot;http://symfony.com/doc/2.0/reference/configuration/doctrine.html&quot;&gt;Configuration Reference&lt;/a&gt;を見ると&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;unix_socket:          /tmp/mysql.sock&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;ふむふむ、この「mysql.sock」を探せば良いのか…とmacのspotlightで検索するも出て来ません。&lt;br /&gt;
ググれ俺。&lt;br /&gt;
って事で&lt;a href=&quot;http://d.hatena.ne.jp/snaka72/20110826/1314348134&quot;&gt;「いろいろあって仕事に手が付かない、、」というブログの記事&lt;/a&gt;に（感謝感謝）。&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;mysqladmin version&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;で調べればわかるとあったのですが、分からず（この理由は後でわかります。）&lt;br /&gt;
諦めかけた時にMAMPのスタートページをふと見ると、「&lt;br /&gt;
ソケット /Applications/MAMP/tmp/mysql/mysql.sock」ってある…&lt;br /&gt;
&lt;br /&gt;
今日の教訓「灯台下暗し」&lt;br /&gt;
&lt;br /&gt;
そんな訳でファイルを修正&lt;br /&gt;
# app/config/config.yml&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;doctrine:&lt;br /&gt;
&amp;nbsp;dbal:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;unix_socket:&amp;nbsp;&amp;nbsp;/Applications/MAMP/tmp/mysql/mysql.sock&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;で意気込んで「php app/console doctrine:schema:update --force」を実行…&lt;br /&gt;
&lt;br /&gt;
また違うエラー出たー！&lt;br /&gt;
今度のエラーは&lt;br /&gt;
&lt;div class=&quot;code-container&quot;&gt;&lt;code&gt;Exception]                                                                                                                                                                  &lt;br /&gt;
DateTime::__construct(): It is not safe to rely on the system&#39;s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &#39;Asia/Tokyo&#39; for &#39;JST/9.0/no DST&#39; instead  &lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;ん？デフォルトのタイムゾーンが違うぞっていう話？？&lt;br /&gt;
おかしいとおもいいつつMAMPのphp.iniを開く。&lt;br /&gt;
やっぱし「date.timezone = &quot;Asia/Tokyo&quot;」になってました。そりゃそうだ、前に直したもんな。なんぞや？...&lt;br /&gt;
やっぱしググれ俺。&lt;br /&gt;
って事で、それっぽい記事を見つけました。&lt;a href=&quot;http://d.hatena.ne.jp/tech-tech/20101116/1289923961&quot;&gt;tech tech -テクテクブログ-の記事&lt;/a&gt;（感謝感謝）を参考にバックアップとコピーする。&lt;br /&gt;
&lt;br /&gt;
今度こそと「php app/console doctrine:schema:update --force」を実行…&lt;br /&gt;
&lt;br /&gt;
無事実行されました。&lt;br /&gt;
なるほど、だからさっきの「mysqladmin version」も分からなかったんだなと一人納得。&lt;br /&gt;
&lt;br /&gt;
ということで今日はちっとも作業がすすみませんでした。&lt;br /&gt;
ではでは。</description><link>http://fusyomono1.blogspot.com/2011/11/symfony2mac.html</link><author>noreply@blogger.com (busyomono99)</author><thr:total>0</thr:total></item></channel></rss>