hitSuji基底クラス

# hitSujiクラス

[Web framework delivered as a C-extension for PHP](https://github.com/Yujiro3/hitSuji "Web framework delivered as a C-extension for PHP")

* [Templateクラス](http://qiita.com/Yujiro3/items/7322a7d71bd5113aaff4)

```php:hitSujiクラス
class hitSuji {
    public static function nonce(string $seed);
    public static function template(void);
    public static function request(array $opstion);
    public static function router(array $opstion);
    public static function delegate(array $opstion);
    public static function quick(array $opstion);
}
```

## 実行時設定

| 名前                     | 変更可能    | デフォルト             |
|:------------------------|:-----------:|:----------------------|
| hitsuji.nonce_function   | PHP_INI_ALL | NULL                   |
| hitsuji.lifetime         | PHP_INI_ALL | 28800                  |
| hitsuji.seed             | PHP_INI_ALL | "asdfj5246485902rweld" |
| hitsuji.template_path    | PHP_INI_ALL | NULL                   |
| hitsuji.page_path        | PHP_INI_ALL | NULL                   |
| hitsuji.string_pattern   | PHP_INI_ALL | "/[^\/]/i"             |
| hitsuji.email_pattern    | PHP_INI_ALL | 下記に記述 |
| hitsuji.date_pattern     | PHP_INI_ALL | "/[0-9]{4}\-?[0-9]{2}\-?[0-9]{2}/" |
| hitsuji.datetime_pattern | PHP_INI_ALL | "/[0-9]{4}\-?[0-9]{2}\-?[0-9]{2}\s?[0-9]{2}:?[0-9]{2}\:?[0-9]{2}/" |


**hitsuji.nonce_function**   string

nonce値取得用の関数名を設定
NULLの場合hitSujiクラスの関数を使用

**hitsuji.lifetime**         long  

nonce値の有効時間（秒）

**hitsuji.seed**             string

nonce値生成用文字列

**hitsuji.template_path**    string

テンプレートファイルの保存パス

**hitsuji.page_path**        string

ページロジックの保存パス

**hitsuji.string_pattern**   string

文字列判定用正規表現

**hitsuji.email_pattern**    string

メールアドレス判定用正規表現

```php
"/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/"
```

**hitsuji.date_pattern**     string

日付判定用正規表現

**hitsuji.datetime_pattern** string

日時判定用正規表現


## nonce値の取得

public static function nonce(string $seed);

**引数**

| 名前      | 型     | 概要         |
|:---------:|:------:|:------------|
| seed      | string | ハッシュ種     |

**戻り値**

nonce値文字列

```php
$nonce = \hitSuji::nonce('/usr/:id');
```

ワンタイムパスワードなどで使用する文字列を取得します。



## ビューの呼び出し

public static function template();

**戻り値**

hitSuji\Viewオブジェクト

```php
$template = hitSuji::template();
$template->layout('layout.tpl');
```


## リクエスト処理

public static function request(array $opstion);


**引数**

| 名前      | 型     | 概要         |
|:---------:|:------:|:------------:|
| opstion   | array  | オプション   |

**オプション**

変数名をキーとして配列を渡します。

| 配列要素型  | 概要               |
|:-----------|:------------------|
| number      | 数値判定           |
| string      | 文字列判定         |
| email       | メールアドレス判定 |
| url         | URL判定            |
| date        | 日付判定           |
| datetime    | 日時判定           |
| regex       | 正規表現判定       |

| Track指定   | 概要                        |
|:-----------:|:---------------------------|
| post        | $_POSTデータ                |
| get         | $_GETデータ                 |
| route       | URL指定したデータ /user/:id |
| cookie      | $_COOKIEデータ              |
| server      | $_SERVERデータ              |
| request     | $_REQUESTデータ             |

| 特殊指定    | 概要                        |
|:-----------:|:---------------------------|
| require     | 必須データ                  |

**戻り値**

取得したデータ

```php
$vars = hitSuji::request([
  'id'=> number,
  'name'=> array('string', 'require'),
  'email'=> array('email', 'request'),
));
```


## ルーター処理

public static function router(array $opstion);

**引数**

| 名前      | 型     | 概要         |
|:---------:|:------:|:------------:|
| opstion   | array  | オプション   |

**オプション**

アクセスURLをキーとして配列を渡します。

| キー      | 概要                                     |
|:---------|:----------------------------------------|
| ''        | emptyの場合はデフォルト処理              |
| /user/:id | :(変数名) コロン＋変数名でURL文字列取得  |
| /about    | 変数名なしのアクセスパス                 |

| 配列要素    | 概要                       |
|:-----------|:--------------------------|
| 'get'       | GETメソッドの処理          |
| 'post'      | POSTメソッドの処理         |
| callback    | 処理をするコールバック関数 |
| phpファイル | 処理をするPHPファイル名    |


```php
\hitSuji::router([
  '' => 'always.php'
  '/user/:id' => ['post', 'user.php']
  '/about' => [
    function() {
      echo 'about';
    }, 'get'
  ]
]);
```


## デリゲータ処理

public static function delegate(array $opstion);

**引数**

| 名前      | 型     | 概要         |
|:---------:|:------:|:------------:|
| opstion   | array  | オプション   |

**オプション**

| キー   | 概要                           |
|:------|:------------------------------|
| data   | 直接指定したデータ             |
| bind   | フォームなどのデータ取得ルール |
| parse  | データの解析処理               |
| action | DBなどアクション処理           |
| always | デフォルト表示処理             |
| done   | 成功時表示処理                 |
| fail   | 失敗時表示処理                 |


```php
hitSuji::delegate([
  'data' => [
    'skey' => $_REQUEST['skey']
  ],
  'bind' => [
    'id' => ['number', 'route'],
  ],
  'parse' => function ($data) {
    return array_map('intval', $data);
  },
  'action' => function ($data) {
    return [true, $data];
  },
  'always' => function ($values) {
    echo 'デフォルト';
  },
  'done' => function ($values) {
    echo '成功';
  },
  'fail' => function ($values) {
    echo '失敗';
  }
]);
```

![001.png](https://qiita-image-store.s3.amazonaws.com/0/56661/ee125c05-d3a6-766a-99c0-cb99756c80b7.png)



## クイック処理

public static function quick(array $opstion);

**引数**

| 名前      | 型     | 概要         |
|:---------:|:------:|:------------:|
| opstion   | array  | オプション   |

**オプション**

| キー   | 概要                           |
|:------|:------------------------------|
| data   | 直接指定したデータ             |
| parse  | データの解析処理               |
| action | DBなどアクション処理           |
| done   | 成功時処理                     |
| fail   | 失敗時処理                     |


```php
hitSuji::quick([
  'data' => [
    'skey' => $_REQUEST['skey']
  ],
  'parse' => function ($data) {
    return array_map('intval', $data);
  },
  'action' => function ($data) {
    return [true, $data];
  },
  'done' => function ($values) {
    echo '成功';
  },
  'fail' => function ($values) {
    echo '失敗';
  }
]);
```

![002.png](https://qiita-image-store.s3.amazonaws.com/0/56661/9432e0e7-67fb-eea6-dc0b-da37c939387f.png)