仕事用のテンプレートでREADME書いてなくてすみません。
https://github.com/ya-sasaki/slim3-skeleton
マイクロフレームワークのSlim3(PHPですよ)
ひと昔前にGoogle App Engine用のSlim3(java)というのがありましたが、違います。PHPです。
5年ぐらいFuelPHPで仕事してますが、素のFuelPHPでは開発せず、随所で薄い拡張を施します。
プロジェクトによって拡張も改良するのですが、如何せん属人的で開発がうまく進まないことがありました。
(Coreの中を読める人がいないので、丸投げすると上手くいかない)
https://www.slimframework.com/docs/
マイクロっていうぐらいなので、ドキュメントがこんなものしかありませんがこれで十分です。
必要なものは全部Composerで調達し、フレームワーク自体の教育はほぼ不要。
多少プロジェクトが肥大しても大丈夫なような構成(スケルトンが)にしてあるから、
各自頑張ってねというスタイルにしようと思ってます(というかそうします)
個人的にLaravel microなlumenの方が美しくて好きなのですが、
「大体Laravelと一緒だからLaravelのドキュメント見てね」
というLaravelナレッジありきな感じなので今回は却下。
Laravelが不動の地位になったときに考える。
バージョンとか
PHP7, ES6, SASSを使うのでNodeも必要
(執筆時点です)
- PHP 7.0.13(開発環境はビルトインサーバ)
- Node 6.9.2
- Npm 3.10.9
サードパーティ(PHPの)
FuelPHPのクエリビルダのようなものがidiorm、ORMのようなものがparisですね。
viewはLaravelのbladeがいいなと思ってたのでbladeだけ使わせてもらいます。
- slim (FW本体)
- monolog (ロガー)
- idiorm (ORM)
- paris (ORM)
- laravel-blade
Install
git clone, composer install, npm install, gulp
ViewEngine
laravel-bladeが嫌な人はcomposerでengine追加して
public function view() {
$app_dir = ROOT.$this->app->namespace . "/";
$engine = new \Philo\Blade\Blade($app_dir . "views/", $app_dir . "views_cache/");
return $engine->view();
}
このあたりを書き換えてもらえればと思います。
module化
スケルトン上はappがmoduleに相当します。
bootstrap/routes.phpでアプリケーションコンテナにnamespaceを指定すると
そのフォルダのviewを参照するようになります。
<?php
$app->group("", function() use($app) {
// namespace を付与
$app->namespace = "app";
$controller = new App\Controller\HomeController($app);
$app->get("/", $controller("index"));
});
管理画面のURLを/adminとする場合は
<?php
$app->group("/admin", function() use($app) {
// namespace を付与
$app->namespace = "admin";
$controller_home = new Admin\Controller\HomeController($app);
$app->get("/", $controller_home("index"));
$controller_user = new Admin\Controller\UserController($app);
$app->get("/users", $controller_user("index"));
});
単純ですね。
ジョブ
ジョブ実行はWebではないので、dependencies, middleware, settingあたりだけロードすれば十分実装可能です。
また、PSR-4でautoloadされているので、既成のプログラム等も自由に利用可能です。
Gulp
テスト時はデフォルトでPHPビルトインサーバの起動、ES6,SASSの変更監視をしてブラウザに同期します。
デプロイ用のbuildタスクでES6、SASSのコンパイルをします。(ES6はトランスパイルだけど、、、)
$ gulp (テスト時)
$ gulp build (コンパイルだけ)
今後もこのスケルトンは今後も更新していきますが、やりすぎないように気を付けます。
(気が付くとフルスタックになってるかもしれないので)