CakePHP - ブログチュートリアル


#いろいろな関数

##is

- `is('get')` 現在のリクエストが GET かどうかを調べます。
- `is('put')` 現在のリクエストが PUT かどうかを調べます。
- `is('post')` 現在のリクエストが POST かどうかを調べます。
- `is('delete')` 現在のリクエストが DELETE かどうかを調べます。
- `is('head')` 現在のリクエストが HEAD かどうかを調べます。
- `is('options')` 現在のリクエストが OPTIONS かどうかを調べます。
- `is('ajax')` 現在のリクエストが X-Requested-With = XMLHttpRequest に由来するものか どうかを調べます。
- `is('ssl')` リクエストが SSL 経由かどうかを調べます。
- `is('flash')` リクエストに Flash の User-Agent があるかどうかを調べます。
- `is('mobile')` リクエストがモバイルエージェントの共通リストに由来しているかどうかを調べます。

##find
`find(string $type = 'first', array $params = array())`

- データの取得のために使う関数。
- `$type = `
    - `'all'`
    - `'first'`
    - `'count'`
    - `'list'`
    - `'neighbors'`
    - `'threaded'`
    - 自分で定義したカスタムfinder
- `$type`は大文字と小文字を区別する。
- `$params`はいろいろな種類の`find()`ヘのパラメータを渡すために使用。（デフォルトでは以下）

```php
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'), // GROUP BYのフィールド
    'limit' => n, // int
    'page' => n, // int
    'offset' => n, // int
    'callbacks' => true, // falseの他に'before'、'after'を指定できます
    'having' => array('COUNT(Model.field) >' => 1), // HAVING 条件の配列
    'lock' => true, // FOR UPDATE ロックを有効にします
)
```

###findbyid

サンプル：`$this->Cake->findById(7);`
対応するSQL:`Cake.id = 7`

###find('all')

`find('all', $params)`

- 配列で結果を返す。

戻り値は以下のような形式

```php
Array
(
    [0] => Array
        (
            [ModelName] => Array
                (
                    [id] => 83
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

            [AssociatedModelName] => Array
                (
                    [id] => 1
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

        )
)
```

##set

`$this->set('変数名',$値);`

- Viewにデータを渡すためのControllerの機能。
- setメソッドを使用して渡された変数は、view内で使用することができる。

##create

`Model::create(array $data = array())`

- データを保存するためにモデルの状態をリセットする。
- 実際にはデータベースにデータは保存されない。
- `Model::$id`フィールドがクリアされ、データベースのフィールドのデフォルト値を元に、`Model::$data`の値をセットする。
- データベースフィールドのデフォルト値が存在しない場合、`Model::$data`には空の配列がセットされる。
- `$data`パラメータが渡されれば、データベースフィールドのデフォルト値都マージされ、モデルのインスタンスはデータを保存する準備ができる。
- `$data`パラメータへ`false`や`null`が渡された場合、`Model::$data`には空の配列がセットされる。

##save
`save(array $data = null, array $params = array())`

- 配列の形式のデータを受け取ってそれを保存する。
- 2つ目のパラメータはバリデーションしない場合に使われる。
- 3つ目のパラメータは保存する対象のフィールドのリストを渡す。

##redirect

`Controller::redirect(mixed $url, integer $status, boolean $exit)`

- フローをコントロールするメソッド。（画面遷移）
- 最初の引数に、CakePHPの相対URLを指定する。
- `$url`に相対URLまたは絶対URLを指定することができる。
- 2つ目のパラメータは、リダイレクトに伴うHTTPステータスコードを定義することができる。
- 3つ目のパラメータに`false`を指定しない限りはリダイレクト後に`exit()`を呼び出す。






#グローバル関数

##`__`
`__(string $string_id, boolean $return = false)`

- `$string_id`は翻訳用のIDを規定
- 第2引数で自動的に文字列をecho出力するか（デフォルトでは出力される）

##`h`

`h(string $text, string $charset = null)`

- `htmlspecialchars()`のラッパー。
- 特殊文字をHTMLエンティティに変換する。

###参考

>ラッパー関数：元々ある関数を包む関数。関数をラッピングして使いやすくする為の関数。

```javascript
function funcA_wrapper(paramA){

	//ラッパー関数を使い指定可能なパラメータを限定することでシンプルに！
	funcA(paramA, 111, 222, 333, 444, 555);

}

//パラメータを限定することで自由度が下がるが扱いが簡単に！
funcA_wrapper(paramA);
```

#ヘルパー

**ヘルパーの設定**

CakePHPでヘルパーを有効にするには、Controllerに認識させる必要がある。
書くコントローラは`$helpers`プロパティを持っており、そのプロパティにはViewで利用できるヘルパーの一覧が保持されている。
Viewでヘルパーを使用するには、ヘルパーの名前をControllerの`$helpers`配列に追加する。

```php:example
class BakeriesController extends AppController {
    public $helpers = array('Form', 'Html', 'Js', 'Time');
}
```

**ヘルパーを使う**

次のようにしてヘルパーを使う。

`echo $this->Html->css('styles');`

##Html

###link

HTMLリンクを作成するためのメソッド。


```php
echo $this->Html->link(
    'Enter',
    '/pages/home',
    ['class' => 'button', 'target' => '_blank']
);
```

出力結果：

```html
<a href="/pages/home" class="button" target="_blank">Enter</a>
```

[その他の出力参考例](https://book.cakephp.org/3/ja/views/helpers/html.html#id5)

##Form

###create

- フォームの開始タグを出力する。

[フォームの作成](https://book.cakephp.org/2/ja/core-libraries/helpers/form.html#id1)

###end

- フォームの閉じタグを出力する。

[フォームを閉じる](https://book.cakephp.org/2/ja/core-libraries/helpers/form.html#id2)

### その他

[フォームの要素の生成](https://book.cakephp.org/2/ja/core-libraries/helpers/form.html#automagic-form-elements)


----
----

※チュートリアルを進めながら更新していきます。