SlideShare una empresa de Scribd logo
1 de 93
Descargar para leer sin conexión
3時間濃縮
     CakePHP2.1

                                    by nipotan
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
本日の主旨

   8時間耐久を圧縮
  CakePHP2.1の基本
骨の髄に(強制的に)刻みこむ
 時間が許す範囲で応用技


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
who am I




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
?
       CakePHP2実践入門(仮)
    技術評論社より今夏出版予定
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
本日のメニュー
    MVCの考え方
   セットアップの肝
 コントローラーの使い方
   モデルの使い方
   ビューの使い方
    応用技の紹介
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
by crabchick




     MVCの考え方
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
MVCだらけ




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CakePHPもMVC




    Railsインスパイア系
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
なぜMVC

 複雑化するプログラム
      整理が必要
    分割の経験則
 Model View Controller


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
MVCに分割


 巨大な
プログラム




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
MVCの役割
•Model
  データや処理(データベース処理)

•View
  見た目を担当(HTMLの出力)

•Controller
  入力を受けてモデルとビューを呼ぶ(それ以外)



 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CakePHPの前に


ふつうのPHPスクリプト
  で考えてみます




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
<?php
         $keyword = '';
         if (isset($_POST['keyword'])) {
                $keyword = $_POST['keyword'];
         }


         mysql_connect('localhost','user','password');
         mysql_select_db('cakephp_sample');
         mysql_query('set names utf8');
         $sql = sprintf(
              "SELECT id,name,description FROM friends WHERE name LIKE '%s'",
              mysql_real_escape_string('%'.$keyword.'%')
         );
         $result = mysql_query($sql);
         $data = array();
         while ($row = mysql_fetch_assoc($result)) {
              $data[] = $row;
         }
         ?>
         <html>
         <head><title>テストページ</title></head>
         <body>
         <form action="list1.php" method="POST">
         <input name="keyword"><input type="submit">
         </form>
         <ul>
         <?php
         foreach ($data as $row) {
                echo '<li>';
                echo $row['name'];
                echo $row['description'];
                echo '</li>';
         }
         ?></ul>
         </body></html>




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
<?php
         $keyword = '';
         if (isset($_POST['keyword'])) {
                $keyword = $_POST['keyword'];
         }


         mysql_connect('localhost','user','password');
         mysql_select_db('cakephp_sample');
         mysql_query('set names utf8');
         $sql = sprintf(
              "SELECT id,name,description FROM friends WHERE name LIKE '%s'",
              mysql_real_escape_string('%'.$keyword.'%')
         );
         $result = mysql_query($sql);
         $data = array();
         while ($row = mysql_fetch_assoc($result)) {


                                                      Modelへ
              $data[] = $row;
         }
         ?>
         <html>
         <head><title>テストページ</title></head>
         <body>
         <form action="list1.php" method="POST">
         <input name="keyword"><input type="submit">
         </form>
         <ul>
         <?php
         foreach ($data as $row) {
                echo '<li>';
                echo $row['name'];
                echo $row['description'];
                echo '</li>';
         }
         ?></ul>
         </body></html>                                    Viewへ

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
<?php
                                    //model.php
                                    mysql_connect('localhost','user','password');
                                    mysql_select_db('cakephp_sample');
                                    mysql_query('set names utf8');
                                    $sql = sprintf(
                                         "SELECT id,name,description FROM friends WHERE name LIKE '%s'",
                                         mysql_real_escape_string('%'.$keyword.'%')
                                    );
                                    $result = mysql_query($sql);
                                    $data = array();
                                    while ($row = mysql_fetch_assoc($result)) {
<?php
//index.php
$keyword = '';
                                    }
                                         $data[] = $row;
                                                                                       Model
if (isset($_POST['keyword'])) {
    $keyword = $_POST['keyword'];
}

                                    <!-- view.php -->
include ‘model.php’;                <html>
include ‘view.php’;                 <head><title>テストページ</title></head>


                 Controller
                                    <body>
                                    <form action="list1.php" method="POST">
                                    <input name="keyword"><input type="submit">
                                    </form>
                                    <ul>
                                    <?php
                                    foreach ($data as $row) {
                                           echo '<li>';
                                           echo $row['name'];
                                           echo $row['description'];
                                           echo '</li>';
                                    }


                                                                                         View
                                    ?></ul>
                                    </body></html>




        3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
別々にしただけ
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ひとつの方が楽?
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
問題は量
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
自然発生




     進化の答えがMVC
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CakePHPのMVC
                      Controller置き場
                        (全ての起点)


                       Model置き場
                     (データベース関連)


                         View置き場
                        (HTML関連)

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CakePHP習得の為に

   Controllerの知識
    Modelの知識
     Viewの知識
 それぞれの理解を深める


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
セットアップの肝
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ポイント
       pdo_mysql
      mod_rewrite
      PHP5.2以上
core.php / database.php
chmod -R 777 app/tmp

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
phpinfo()




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
mod_rewriteが無い




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
mod_rewriteの有効化




   わりと地雷(勉強会中)
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
rewrite無しの場合
 /**
   * To configure CakePHP *not* to use mod_rewrite and to
   * use CakePHP pretty URLs, remove these .htaccess
   * files:
   *
   * /.htaccess
   * /app/.htaccess
   * /app/webroot/.htaccess
   *
   * And uncomment the App.baseUrl below:
   */
 	     //Configure::write('App.baseUrl', env('SCRIPT_NAME'));



 コメントを外す(rewriteが無理な時だけ)
   urlの末尾にindex.phpを付ける

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
準備完了




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Controllerの使い方
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
典型的なコントローラー
<?php
// app/Controller/TasksController.php
App::uses('AppController', 'Controller');


class TasksController extends AppController {
   public function index() {
      $task_data = $this->Task->find( all );
      $this->set( task_data ,$task_data);
   }
}


 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Controllerの必須テク
   ディスパッチのルール
    $scaffold $uses
    $this->render()
      $this->set()
    $this->redirect()
     $this->request
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ディスパッチ


アクセスされたURLに応じ
て適切なコントローラーを
   呼び出す機構



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ページコントローラー

     index.php
     menu.php
    mypage.php
 に直接URLからアクセス
   (ふつうのPHP)

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
フロントコントローラー

      index.php
  にまずアクセスして、
その中でそれぞれの処理に
        飛ばす
 (CakePHPはこの方式)

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ディスパッチの例
/tasks/index
→TasksControllerのindex
/Oden/umai
→OdenControllerのumai
/my_page
→MyPageControllerのindex
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
routes.phpなら


任意のマッピングも追加可能
(最後にURLだけ変更とか)
そのままでOKなら設定不要



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$scaffold


   public $scaffold;
とするだけで標準機能が動く

           ※動作確認などに便利



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$uses
class MyController extends AppController {
    public $uses = array( Task , User );
}

 コントローラーが使うモデルのリスト
  省略時はコントローラー名と同一

   命名規則で苦しむのは横着するからです


  3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->render()
        $this->render( hoge );


   任意のViewを呼び出す
省略時はアクション名と同名を呼ぶ


  同じViewを使いまわす事もできる!



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->set()
   $this->set( hoge , this is data );


    任意のデータをViewへ渡す
    スカラー値も配列も渡せる


    Viewで使いたいデータはset()!



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->redirect()
     $this->redirect( oden/umai );

   任意のページへリダイレクト
        $this->flash() や
   $this->Session->setFlash()
   と組みわせてメッセージ表示

    登録完了やエラー時によく使う


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->request
         $this->request->data
         $this->request->pass
          $this->request->is()

フォームの入力内容などにアクセス可


$_POSTなどを使った者は校庭10周に処す


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Modelの使い方
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
典型的なモデル

<?php
// app/Model/Task.php
App::uses('AppModel', 'Model');


class Task extends AppModel {
   public $useTable = 'tasks';
}




 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Modelの必須テク
        $useTable
       $primaryKey
           find()
     save() saveField()
    updateAll() delete()
        deleteAll()
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Modelの必須テク2

      $validates
     $belongsTo
 $hasOne / $hasMany
$hasAndBelongsToMany


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Model手強い


    Modelを制する者は
      Cakeを制す



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$useTable
   public $useTable = tablename ;

モデルが処理を行うテーブル名を指定
 省略時はモデル名の複数形になる
 falseにするとテーブル無しモデル


          ここもはまりやすい


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$primaryKey
       public $primaryKey = id ;

   テーブルの主キーを設定
      省略時は id
 既存のテーブルを使う場合に便利




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find()
      $this->find( all ,$options);
     $this->find( first ,$options);
    $this->find( count ,$options);
     $this->find( list ,$options);
  $this->find( threaded ,$options);
  $this->find( neighbors ,$options);

オプション次第で自在にSQL文を実行
    (オプションが多い)

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find()のオプション
array(
   'conditions' => array('Model.field' => $thisValue),
   'recursive' => 1, //int
   'fields' => array('Model.field1', 'DISTINCT Model.field2'),
   'order' => array('Model.created', 'Model.field3 DESC'),
   'group' => array('Model.field'),
   'limit' => n,
   'page' => n,
   'offset' => n,
   'callbacks' => true
)




  3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find()のオプション




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find()のオプション
array(
   'conditions' => array('Model.field' => $thisValue),
   'recursive' => 1, //int
   'fields' => array('Model.field1', 'DISTINCT Model.field2'),
   'order' => array('Model.created', 'Model.field3 DESC'),
   'group' => array('Model.field'),
   'limit' => n,
   'page' => n,
   'offset' => n,
   'callbacks' => true
)


   必要ない部分は適宜省略可能
 様々なfind()にこのオプションを使う
  3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find( all ) の結果
      $data = $this->Hoge->find( all );


 $data[0][ Hoge ][ name ]; // Hogeのname
$data[0][ Hoge ][ twitter ]; // Hogeのtwitter




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
= 以外の比較
// field > a のような比較
array(
   'conditions' => array('Model.field >' => $thisValue),
)


// field like %a% のような比較
array(
   'conditions' => array('Model.field like' => % .$thisValue. % ),
)




      キー名にスペースを空けて演算子

    3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
AND条件 OR条件
// AND
array(
   'conditions' => array(
     'Model.field <' => 100
     'Model.field >' => 20
   ),
)
// OR
array(
   'conditions' => array(
      OR => array(
       'Model.field' => 10,
       'Model.type' => A ,
     )
   ),
)


   3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find( first ) の結果
    $data = $this->Hoge->find( first );


 $data[ Hoge ][ name ]; // Hogeのname
$data[ Hoge ][ twitter ]; // Hogeのtwitter




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find( count ) の結果
   $data = $this->Hoge->find( count );



            数値で帰ってくる




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find( list ) の結果
    $data = $this->Hoge->find( list );



           リストで帰ってくる




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
find( threaded )
     find( neighbors )




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
save()
Model->save($data,$validate = true);


渡されたデータを元にデータを保存
  INSERT/UPDATEに両対応
  主キーがあるかないかで分岐




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
saveField()
         Model->id = $id;
  Model->saveField($name,$value);


      単一のフィールドを更新
       しかしあまり使わない
     (save()で同じ事ができる)



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
updateAll()

Model->updateAll($fields,$condition);



条件にマッチするデータを全て更新
      あまり使わない
 (データが少なければ1件づつ
  save()でも問題ないので)


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
delete() deleteAll()
    Model->delete($id,$cascade);
 Model->deleteAll($condition,$cascade);



   DELETEを実行できる。
しかし実際のシステムでDELETEは使わ
ず削除フラグなどで操作する事が多い。


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$validates
  public $validate = array(
     'twitter' => array(
        'rule' => 'notEmpty',
        'message' => 'Twitter is very important'
     ),
     'name' => array(
        'rule' => 'notEmpty',
     )
  );




     配列で設定したとおりに検査
       save前に実行される

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$validates




メッセージや複雑な条件も設定可能

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
アソシエーション

     $belongsTo
 $hasOne / $hasMany
$hasAndBelongsToMany



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$belongsTo
public $belongsTo = array(
   'Shimokita' => array(
      'foreignKey' => 'friendlist_id'
   )
);


 モデルが属する上位モデルを指定
日記(たくさん) ー> ユーザー(1)


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$belongsTo




設定さえすれば自動で関連データを取得


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$hasMany
public $hasMany = array(
   'Item'
);




モデルが所有している下位モデルを指定
  ユーザー ー> 日記(たくさん)


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$hasMany




 複数件の関連データが取得される
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Viewの使い方
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Viewの必須テク
        Layoutの変更
       $this->request
      $this->element()
         $this->Html
        $this->Form

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Layout




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Layoutの変更

ビューはレイアウトの中に
   読み込まれる
     標準は
  app/View/Layout/default.ctp



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
default.ctpの要所
<body>
<div id="container">
    <div id="header">
    <h1><?php echo $this->Html->link($cakeDescription, 'http://cakephp.org'); ?></h1>
    </div>
<div id="content">
    <?php echo $this->Session->flash(); ?>
    <?php echo $this->fetch('content'); ?>
</div>
<div id="footer">
    <?php echo $this->Html->link($this->Html->image('cake.power.gif'),
        'http://www.cakephp.org/',
        array('target' => '_blank', 'escape' => false));?>
</div>
</div>
<?php echo $this->element('sql_dump'); ?>
</body>




          3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CSSなど
   <head>
       <?php echo $this->Html->charset(); ?>
       <title>
            <?php echo $cakeDescription ?>:
            <?php echo $title_for_layout; ?>
       </title>
       <?php
            echo $this->Html->meta('icon');
            echo $this->Html->css('cake.generic');
            echo $scripts_for_layout;
       ?>
   </head>




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CSS、画像はwebroot




3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->request

 echo $this->request->data[ name ]




リクエストはビューでも取れる
  (引き回す必要無し)

 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->element

echo $this->element( template ,$data);



テンプレートから別のテン
  プレートを読み込む。
(変数はオプションで渡す)

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->Html
$url = array(
   controller => hoge ,
   action => index
);
echo $this->Html->link($title,$url);

HTMLを生成するヘルパー
 URLを自動生成して便利
 (手動でタグは書かない)
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
$this->Form

echo $this->Form->create( ModelName );
echo $this->Form->input($fieldName);


  フォームを生成する
 初期値のフィルインや
エラーメッセージを自動化

3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
応用技の紹介
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
CakePHPの応用技

     MVCのバランス
    MVCの各部品を強化
    標準の強力な機能群
    MVCの各要素に対応


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
ベストプラクティス




     モデル層を厚くせよ
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
MVC::BHC
                           Behavior
   Component
                            Model
    Controller
                            Helper

                             View



3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
応用技に手を伸ばす時

   コードが肥大化した時
     まずはHelper
    次にComponent
    最後にBehavior


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Helper

  Html                   Paginator
  Form                    Session
  Cache                     Rss
   Js


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Component

     Acl                 Pagination
    Auth                  Security
   Cookie                 Session
RequestHandler



 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
Behavior

   Tree
Containable




 3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
まだある応用技

         プラグイン
         Coreクラス
          Console
        ユニットテスト


3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
今後の羅針盤




    http://book.cakephp.org/2.0/en/
    http://book.cakephp.org/2.0/ja/
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)
吐き気に勝った!
3時間濃縮CakePHP2.1@札幌 / Yusuke Ando (@yando)

Más contenido relacionado

La actualidad más candente

Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 

La actualidad más candente (18)

Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
 
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠PHP foreachでの参照渡しに潜む罠
PHP foreachでの参照渡しに潜む罠
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 

Similar a 3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012

勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_h
Jun Chiba
 

Similar a 3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012 (20)

test
testtest
test
 
Cakephp api
Cakephp apiCakephp api
Cakephp api
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_h
 

Más de Yusuke Ando

DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
Yusuke Ando
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
Yusuke Ando
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
Yusuke Ando
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
Yusuke Ando
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
Yusuke Ando
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
Yusuke Ando
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
Yusuke Ando
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
Yusuke Ando
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
Yusuke Ando
 

Más de Yusuke Ando (20)

ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
 
Dev opschef
Dev opschefDev opschef
Dev opschef
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
New relic
New relicNew relic
New relic
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
 
Engine Yard Cloud
Engine Yard CloudEngine Yard Cloud
Engine Yard Cloud
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
 

Último

Último (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012