Lucid ChartからLaravelのrouteのひな形を生成する(1)
こんにちは、株式会社スマレジ、エンジニアのmasaです。
今日は以前から作っているLucid Chart APIの矩形データ読み込みを使って、Laravelのrouteファイルのひな形を生成したいと思います。
前回のブログ↓
Laravel6.xのroute機能
基本的なことは↑の公式ドキュメントで確認してください。 このシリーズでは特に↓のような
Route::get('/user', 'UserController@index');
http_methodとコントローラ、アクション、パラメータの指定までを生成したいと思います。 今回は取り急ぎの仕様と、前準備としてHTTP_METHODをページ情報に紐づけるところまでをやります。
Lucid Chartで作成する画面遷移図の仕様
今回は一番簡単な「テーブルから必要情報を抜き出して、ファイルを生成する」ことを考えます。 以前のブログでも使用した↓のテーブルが1つの画面だと考えます。
でHTTP_METHODについては、矢印側で表現するようにします。
矢印情報からページのHTTP_METHODを取得する。
過去ブログ(↓)でも記載したように、Lucid Chartでは矢印情報に矢印の形(矢じりなのか、何もないのか等)と始点と終点の矩形のIDが付与されています。 masa2019.hatenablog.com
なので、「矢印の形が矢じりであり、IDが一致する場合の矢印のtext」を取得し、テーブル情報に追加する処理を追記します。 HTTP_METHODは一つのURLに複数定義できるので、今回は
[ [ "HTTP_METHOD", "GET"], [ "HTTP_METHOD", "POST"], [ "HTTP_METHOD", "DELETE"] ]
という風にセットするようにします。(カンマ区切りで連結してもよいかと)
HTTP_METHODの取得処理は↓のような感じ
/** * 矢印情報からそのページに必要なHTTP_METHODを取得する * @param \SimpleXMLElement $block ページ情報 * @return array|bool 該当するmethodがあれば */ private function getAllowHttpMethod(\SimpleXMLElement $block) { $lines = $this->getLines(); $blockArray = (array)$block; $blockId = Arr::get($blockArray, 'id'); if (blank($blockId)) { return false; } foreach($lines as $key => $line) { $lineArray = (array)$line; $endpoint1 = Arr::get($lineArray, 'endpoint1'); $endpoint1Array = (array)$endpoint1; $endpoint2 = Arr::get($lineArray, 'endpoint2'); $endpoint2Array = (array)$endpoint2; //矢印の矢(Arrow)側のIDを取得 if (Arr::get($endpoint1Array, 'style') == "Arrow") { $lineId = Arr::get($endpoint1Array, 'block'); } elseif (Arr::get($endpoint2Array, 'style') == "Arrow") { $lineId = Arr::get($endpoint2Array, 'block'); } else { $lineId = ""; } //IDが一致していたら、矢印のHTTP_METHODを登録 if ($lineId == $blockId) { $httpMethod = strtoupper(Arr::get($lineArray, 'text')); $httpMethodArray = ["POST", "PUT", "GET", "DELETE", "PATCH", "OPTION"]; if (array_search($httpMethod, $httpMethodArray) != false) { return [ "HTTP_METHOD", strtoupper(Arr::get($lineArray, 'text')), ]; } $this->setErrorInfo("http_method string is wrong."); break; } } return false; }
これを↓のところで呼ぶ。
/** * ページ情報配列を作成 * @return array */ public function getTableInfos() { $blocks = $this->getBlocks(); $pageInfos = []; foreach ($blocks as $block) { $aryInfo = (array)$block; if (!in_array($aryInfo["class"],self::LUCID_TABLE_CLASS_LIST, true)) { //テーブル以外はスキップ continue; } + $pageInfo = $this->getTableInfo($block); + $allowHttpMethod = $this->getAllowHttpMethod($block); + if (is_array($allowHttpMethod)) { + $pageInfo[] = $allowHttpMethod; + } + $pageInfos[] = $pageInfo; } return $pageInfos; }
これで、getTableInfos()
でえられるページ情報が下記のような感じに。
ひとまず、これで最低限のrouteを書く情報はそろいました。 正規表現への対応とか、LaravelのRouteの機能はまだまだありますが、それは骨を作ってから拡張していく方向で考えています。