| PHP | XAMPP |
FuelPHP
思想
- 規約より設定
- MVCパターン
- テンプレートエンジンは、独自言語ではなくPHP
- oilコマンドで、コードの自動生成、データベースマイグレーション、パッケージインストール、自作コードの実行が可能
環境構築
Ubuntu
oil クイックインストール
- piroto@phpenv:~$ curl -L https://get.fuelphp.com/oil | sh
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 479 100 479 0 0 447 0 0:00:01 0:00:01 --:--:-- 449
~/.bashrcにPATHを追加
- export PATH="/opt/lampp/bin:$PATH"
FuelPHPのインストールと新しいプロジェクトを作成
- $ oil create test_prj
- $ ls test_prj/
- CHANGELOG.md LICENSE.md TESTING.md composer.lock docs oil
- CONTRIBUTING.md README.md composer.json composer.phar fuel public
- Apacheからアクセスできるようにシンボリックリンクを設定
- $ cd /opt/lampp/htdocs/
- $ ln -s ~/workspaces/test_prj/public test_prj
PHPUnitのインストール
PHPUnitのインストール
ライブラリ
配置場所
- サードパーティ製のライブラリを配置する場所
- fuel/vendor
- fuel/packages
設定
設定ファイル
ファイル名
|
内容
|
config.php
|
メイン設定
|
db.php
|
DB設定
|
routes.php
|
ルーティング設定
|
環境
環境別の設定ファイル
クラス定数
|
値
|
意味
|
Fuel::DEVELOPMENT
|
development
|
開発環境
|
Fuel::TEST
|
test
|
テスト環境
|
Fuel::STAGING
|
staging
|
ステージング環境
|
Fuel::PRODUCTION
|
production
|
本番環境
|
環境の設定
- 現在の環境は、FUEL_ENV の値により決定
- .htaccessが利用できる環境では、
- SetEnv FUEL_ENV production
- 環境変数 FUEL_ENV が定義されていない場合のデフォルトは開発環境
- 環境変数が設定できない場合、fuel/app/bootstrap.php の以下を設定を変更
- Fuel::$env = \Arr::get($_SERVER, 'FUEL_ENV', \Arr::get($_ENV, 'FUEL_ENV', \Fuel::DEVELOPMENT));
設定ファイル
ログ
- Log::info('hoge');
出力レベル
- 'log_threshold' => Fuel::L_ALL,
オブジェクトをログに出力
- Log::info(print_r($result, true));
MVC
URL基本
- http://hoge.jp/コントローラ/メソッド[/パラメータ1[/パラメータn]]
ディレクトリ構成
- /
- ├── composer.json ・・・ Composer設定
- ├── composer.lock ・・・ Composerによりインストールされた情報
- ├── composer.phar ・・・ Composer実行環境(アーカイブ)
- ├── docs ・・・ ドキュメント
- ├── fuel
- │ ├── app ・・・ アプリケーション
- │ ├── core ・・・ FuelPHP本体
- │ ├── packages ・・・ FuelPHPおよびユーザー作成パッケージ
- │ └── vendor ・・・ Composerパッケージ
- ├── oil ・・・ oilコマンド
- └── public
- ├── assets ・・・ JavaScript ,CSSなど公開リソース
- └── index.php ・・・ フロントコントローラ
- app
- ├── bootstrap.php ・・・ Coreクラスの置き換え時などに使用するブートストラップファイル
- ├── cache ・・・ キャッシュ
- ├── classes
- │ ├── controller ・・・ コントローラ
- │ ├── model ・・・ モデル
- │ └── presenter ・・・ プレゼンタ(ViewModel)
- ├── config
- │ ├── config.php ・・・ 全体設定
- │ ├── db.php ・・・ DB設定
- │ ├── development ・・・ 開発環境用設定
- │ ├── oil.php
- │ ├── production ・・・ 本番環境用設定
- │ ├── routes.php ・・・ ルーティング設定
- │ ├── staging ・・・ ステージング環境用設定
- │ └── test
- ├── lang ・・・ 言語ファイル
- ├── logs ・・・ ログ
- ├── migrations ・・・ マイグレーション
- ├── modules ・・・ MVCをフォルダ別にまとめるモジュール機能
- ├── tasks ・・・ コマンドラインから実行されるタスク
- ├── tests ・・・ テスト
- ├── themes ・・・
- ├── tmp ・・・ 一次ファイル
- ├── vendor ・・・ サードパーティ製ライブラリを配置
- └── views ・・・ ビュー
コントローラー
文字列を返す
- <?php
- class Controller_Sample extends Controller {
- public function action_index() {
- return 'Sample!!';
- }
- }
- ?>
ルーティング
- fuel/app/config/routes.php で設定
- リクエストされたURIと実行されるURIを配列で定義
- 上から順に評価されマッチしたら終了
- return array(
- 'login' => 'user/login'
- )
予約済みルート
- _root_ : コントローラーがないURI、トップページにアクセスした場合
- _404_ : コントローラーやメソッドが定義されていない場合のルート
正規表現によるルーティング
正規表現
|
意味
|
:any
|
任意の部分にマッチ
|
:segment
|
URIの1つのセグメントにマッチ
|
:num
|
数字にマッチ
|
:alpha
|
文字にマッチ
|
:alnum
|
文字と数字にマッチ
|
- 'hoge/(:any)' => 'hoge/entry/$1',
名前付きパラメータ
- URLセグメントに名前をつける
- 先頭に、:をつける
- 'hoge/:year/:month' => 'hoge/entry',
- コントローラーでは、$this->param('year'); などで参照できる
名前付きルート
- ルートに名前をつける
- 'name' => 'hello' が名前定義、helloが名前
- Router::get('hello'); でURLを取得できる
- 'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
Coreクラス
Core
クラス
|
内容
|
Autoloader
|
クラスの自動読み込み
|
Config
|
設定管理
|
Event
|
イベント管理
|
Fuel
|
FuelPHPコアクラス
|
Lang
|
言語切り替え
|
Log
|
ログ管理
|
Module
|
モジュールのロード
|
Package
|
パッケージのロード
|
Security
|
セキュリティ管理
|
DB
クラス
|
内容
|
DB
|
DB操作
|
DBUtil
|
DBユーティリティ
|
Migrate
|
DBマイグレーション
|
Model_Crud
|
CRUD操作を実装したモデル
|
HTML
操作方法
|
内容
|
DB::query()
|
SQLをそのまま
|
クエリビルダー
|
SQLをメソッドで組み立て
|
Model_Crudクラス
|
テーブルCRUD操作のメソッドが実装されている
|
ORMパッケージ
|
ORMツールを使用
|
- piroto@puli-sub1:~$ mysql -u root -p
- Enter password:
- :
- MariaDB [(none)]> create database sample_db default character set utf8;
- Query OK, 1 row affected (0.002 sec)
Userの作成
- '%' は、localhostのワイルドーカードにはならない
- MariaDB [(none)]> create user 'sample_user'@'%' identified by 'password';
- Query OK, 0 rows affected (0.011 sec)
-
- MariaDB [(none)]> grant all privileges on sample_db.* to 'sample_user'@'%' with grant option;
- Query OK, 0 rows affected (0.002 sec)
-
- MariaDB [(none)]> create user sample_user@localhost identified by 'north123';
- Query OK, 0 rows affected (0.003 sec)
-
- MariaDB [(none)]> grant all privileges on sample_db.* to sample_user@localhost with grant option;
- Query OK, 0 rows affected (0.003 sec)
設定
- return array(
- 'default' => array(
- 'type' => 'mysqli',
- )
- );
- fuel/app/config/development/db.php
- return array(
- 'default' => array(
- 'connection' => array(
- // 'dsn' => 'mysql:host=puli-sub1.local:3306;dbname=sample_db',
- 'hostname' => 'localhost',
- 'port' => '3306',
- 'database' => 'sample_db',
- 'username' => 'sample_user',
- 'password' => 'password',
- ),
- ),
- );
確認
- public function action_view() {
- $result = DB::query('select * from sample_table')->execute();
- $data = array(
- 'content' => print_r($result, true),
- );
- $view = View::forge('sample/sample_view', $data);
- return Response::forge($view);
- }
- <textarea style="width:800px;height:400px">
- <?php echo $content; ?>
- </textarea>
Authパッケージ
- http://fuelphp.jp/docs/1.9/packages/auth/intro.html
- Fuel における標準化された認証インターフェイスを提供
- ユーザは自分自身で新しいドライバを書くことができ、 基本的なメソッドを保つことで、古いコードに新しいドライバを簡単に統合可能
- インターフェースには 3 つのタイプのドライバが含まれています
- login ドライバは、ユーザーのログインを処理し同時に複数の login ドライバを扱うことができます
- ログインの種類を気にせず group ドライバを使用し、 2 つのタイプのログインを グループ化できます
ドライバ
- ローカルアクセスを提供する2つのドライバが含まれ、1つ以上のデータベースのテーブルを使用
ドライバ
|
概要
|
Simpleauth
|
基本ドライバセット。ユーザー情報の確認にDBテーブルを利用、グループ、ロール、ACLは設定ファイルに格納。ユーザーレコードにシリアライズされメタデータを格納
|
Ormauth
|
ユーザー、グループ、ロール権限すべての情報をDBに格納し、アクセスのために、ORMモデルを使用。APIはSimpleauthとほぼ互換
|
Opauth
|
PHP用マルチプロバイダ認証フレームワーク composer でインストールされる。OAuth、OpenIDを使用
|
Authパッケージには、ドライバに必要なテーブルを作成するためのマイグレーションファイルが含まれる。作成要否は、Auth設定ファイルで決定
設定
- fuel/packages/auth/config から、auth.php、simpleauth.php を fuel/app/config へコピー
- fuel/app/config/config.php
- 'always_load' => array(
- 'packages' => array(
- 'auth',
- ),
- )
- $ sudo oil refine migrate:up --packages=auth
- Error - Class 'MySQLi' not found in COREPATH/classes/database/mysqli/connection.php on line 116
一旦、Migrationの使用は断念
- Authパッケージのマイグレーションファイルから、Userテーブル作成の該当部分を抜き出して、手動実行する
- package/auth/migrations/001_auth_create_usertables.php
- public function action_createusertable() {
- $table = 'users';
- \DBUtil::create_table($table, array(
- 'id' => array('type' => 'int', 'constraint' => 11, 'auto_increment' => true),
- 'username' => array('type' => 'varchar', 'constraint' => 50),
- 'password' => array('type' => 'varchar', 'constraint' => 255),
- 'group_id' => array('type' => 'int', 'constraint' => 11, 'default' => 1),
- 'email' => array('type' => 'varchar', 'constraint' => 255),
- 'last_login' => array('type' => 'varchar', 'constraint' => 25),
- 'previous_login' => array('type' => 'varchar', 'constraint' => 25, 'default' => 0),
- 'login_hash' => array('type' => 'varchar', 'constraint' => 255),
- 'user_id' => array('type' => 'int', 'constraint' => 11, 'default' => 0),
- 'created_at' => array('type' => 'int', 'constraint' => 11, 'default' => 0),
- 'updated_at' => array('type' => 'int', 'constraint' => 11, 'default' => 0),
- ), array('id'));
-
- // add a unique index on username and email
- \DBUtil::create_index($table, array('username', 'email'), 'username', 'UNIQUE');
-
- return "Created";
- }
400px
SimpleAuth
Tips
WebAPI JSONデータを取得する
- <?php
-
- class Controller_JsonSample extends Controller
- {
- function action_index() {
-
- $url = 'http://hoge/json-api-sample.json';
- $curl = Request::forge($url, 'curl');
-
- $curl->set_method('get');
- $curl->set_params(array());
-
- $response = $curl->execute()->response();
- $json_data = json_decode($response);
-
- $data = [
- 'http_response_code' => $response->status,
- 'json_str' => json_encode($json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE ),
- 'somevalue' => $json_date->somevalue,
- ];
-
- $view = View::forge('jsonsample/jsonsample', $data);
- return Response::forge($view);
- }
- }