Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

pieniというFWを作ってみる。

95 views

Published on

CodeIgniter好きが作るオレオレフレームワーク。
https://drive.google.com/open?id=1JGoEaEv1Of_MhH3V-TlaPlZaENfOJ3CDwgtgnjiELv4

Published in: Software
  • Be the first to comment

  • Be the first to like this

pieniというFWを作ってみる。

  1. 1. CIをもっと小さく! pieniというFWを作ってみる。 CodeIgniter Night 3 2017年05月16日(火) 浅草文化観光センター サジテリアス・システムズ 斎藤 健太 1
  2. 2. 斎藤 健太(サジテリアス・システムズ) 西東京市出身。西東京市在住。妻と娘と3人暮らし。 2014年8月に個人事業主として開業。もうすぐ丸3年。 ずっとLAMP。Linux Mint推し。Thinkpad信者。 マイクロマウス競技(2002年)完走経験あり。今でもはんだごてを握ります。 Heavy Metal好き。今週末はZepp DiverCityでMegadethを観てきます。 今日はオレオレフレームワークpieni(ピエニ)について話します。 2
  3. 3. http://pieni.sagittar.org/ (空のディレクトリの中で)全てのパッケージをまとめてインストール。 curl https://raw.githubusercontent.com/sagittar-org/pieni/master/misc/install.sh | /bin/sh デモ用データベースを作成。 mysql < vendor/sagittar-org/pieni-crud/misc/pieni_crud.sql mysql < vendor/sagittar-org/pieni-classicmodels/misc/classicmodels.sql よければ、ご一緒に。 3
  4. 4. <?php // Definition of package list define('FCPATH', __DIR__.'/'); define('BASEPATH', FCPATH.'vendor/sagittar-org/pieni-base/'); define('APPPATH', FCPATH); $package_list = [ APPPATH, FCPATH.'vendor/sagittar-org/pieni-docs/', FCPATH.'vendor/sagittar-org/pieni-crud/', FCPATH.'vendor/sagittar-org/pieni-auth/', FCPATH.'vendor/sagittar-org/pieni-mail/', FCPATH.'vendor/sagittar-org/pieni-misc/', BASEPATH, ]; index.php これらのパッケージを使うよ、と 指示。 上から順にコメントアウトしていく とわかるかも。 4
  5. 5. // Inclusion of Core helpers foreach ($package_list as $package) { @include_once $package.'/helpers/core.php'; } // Election of Core library require_once elect('libraries', 'Core_library'); $core = new Core_library(); $core->initialize(); index.php(続き) 全てのパッケージの coreヘルパーは (存在すれば)取り込む。 各パッケージで存在確認し、一番優先 度の高いパスを返す。 Loadライブラリのメソッドは全て elect を使用する。 やりたかったこと その1 elect 5
  6. 6. <?php $config = (object) [ 'language_list' => ['ja', 'en'], 'actor_list' => ['g', 'm', 'a'], 'page_target_list' => [ ], 'crud_target_list' => [ 'category', 'item', ], 'default_target' => 'welcome', ]; pieni-crud/config/core.php CRUDの対象となるエンティティ を支持する。 やりたかったこと その2 URIに言語とアクター 6
  7. 7. <?php // メタ // $target->display = "`{$target->name}_id`"; // フィールド $target->field_hash = (object) [ 'category_id' => NULL, 'category_name' => NULL, ]; pieni-crud/targets/category.php CRUDに認識させるフィールド やりたかったこと その3 MVCなしで スカッフォールディング 7
  8. 8. // リレーション $target->has_hash = (object) [ 'category_item' => (object) [ 'name' => 'item', 'key' => 'item_category_id', 'value_key' => 'category_id', ], ]; $target->join_list = [ ]; pieni-crud/targets/category.php(続き 1) アソシエーションや結合を記述。 8
  9. 9. // アクション switch ($target->action) { case 'add': unset($target->field_hash->category_id); break; case 'edit': unset($target->field_hash->category_id); break; } pieni-crud/targets/category.php(続き 2) アクターやアクションなどで 挙動をカスタマイズ。 9
  10. 10. <?php // メタ // $target->display = "`{$target->name}_id`"; $target->where_hash->item_name = '`item_name` LIKE "%{$1}%"'; // フィールド $target->field_hash = (object) [ 'item_id' => NULL, 'category_name' => NULL, 'item_name' => NULL, ]; pieni-crud/targets/item.php 検索も記述。 ビューではフォーム部品が 動的に生成される。 10
  11. 11. // リレーション $target->has_hash = (object) [ ]; $target->join_list = [ (object) [ 'table' => '`category`', 'cond' => '`category_id` = `item_category_id`', ] ]; pieni-crud/targets/item.php(続き 1) カテゴリ名を取得するための結合。 11
  12. 12. // エイリアス switch ($target->alias) { case 'item': $target->add_list = []; break; case 'category_item': unset($target->field_hash->category_name); $target->fixed_hash->item_category_id = $instance->uri->param_list[0]; break; } pieni-crud/targets/item.php(続き 2) カテゴリの子としてのアイテムは、 カテゴリ名の表示は不要。 (追加時の)親カテゴリは固定。 アイテムの一覧からは追加は禁止。 12
  13. 13. MySQL Sample Database http://www.mysqltutorial.org/mysql-sample-database.aspx index.phpへ1行追加。 $package_list = [ FCPATH.'vendor/sagittar-org/pieni-classicmodels/', ... ]; 既存のスキーマでも結構いける? このパッケージの中は configと targetsだけ。MVCなし。 13
  14. 14. ご意見・質問など いただけると 喜びます。 14
  15. 15. ご清聴ありがとうございました。 15

×