ガンズターン 公式サイト

楽しいことに、まじめです。 ——ガンズターンアプリ研究所公式サイト

FuelPHP adminスキャフォールディング 使い方メモ

Pocket

adminスキャフォールディング使ってますか?

こんにちは。今日はいつもより早い時間にブログ更新しようと思っていたのに、気づいたら23時を回っています。
ガンズターンのRyosukeです。

本日の話題は、FuelPHPにおける「adminスキャフォールディング」の使い方……というよりも、単純に自分の備忘を兼ねたメモを残しておきたいと思います。

わたし、FuelPHP(というかPHP自体)を使い始めてからまだ1ヶ月も経っていないド初心者ですので、ひょっとしたら「間違った使い方」とか「遠回りな実装」をしているかも知れません。

もしそんな部分に気づかれた方がいらっしゃったら、コメントか何かでそっとお教えくださると幸いです。

んでは、始めます。

まずは目次から。

1-1. admin使って2個以上テーブル追加したい

最初の1個目のテーブル追加については、何も問題ないと思います。

>oil g admin テーブル名 カラム名:属性[属性値] ……

上記コマンドを使えば、そのテーブルに対して「参照」「編集」「レコード削除」することが可能な管理ページといっしょに、マイグレーションが作成されるはずです。(実際にはSimpleauth(あるいはOrmauth)等の設定作業が事前準備として必要ですが、そこは今回の記事の本筋から離れるので説明割愛します)

けれど、同一プロジェクトに対して、2個以上のテーブルを追加したい時、どうすればいいんでしょうか?
なんか簡単な話のように思えますが、実はわたし、この問題を解決するのに2時間使いました。

単純に、2個目以降のテーブルを作成する時も1個目と同じようにすればよいのかと思ったのですが、そうすると以下のようなエラーメッセージで怒られてしまうんですね。

Uncaught exception Oil\Exception: ~/fuelphp/project/fuel/app/classes/controller/base.php already exists, use -f or –force to override.

英語が達者な方であれば、このメッセージ見た瞬間に「すでに作成しようとしてるファイルが存在してるからエラーになったんだな」とわかると思います。
わたし、英語はできませんが、IT業界に長くいると似たようなエラーには数多く出くわしますので、なんとなくエラーの理由は想像できました。

そして、よくよくエラーメッセージを読んでみると「-fか–forceオプションを使ってくれ」と書かれています。
けれどこれ、そのまま適用しちゃうと「to override」(上書き)されちゃうので、例えばすでに存在している管理画面のソースコードに自分で修正を加えちゃったりしていると、「-f」で実行した途端に全てが白紙に戻っちゃうことになります。

「まさか! admin使うと、テーブル追加するたびに管理画面のソースコードが初期状態に戻っちゃうのか!?」

そんな風に一瞬絶望しかけましたが、なんのことはない、単純な回避策がありました。(当然ですが笑)

1-2. 2個目以降のテーブル追加時には「-s」オプションをつける

「-f」オプションは「force」(強制)の略であり、すでに存在するファイルを上書きする処理でした。
実は、それとは別に「-s」オプションというものがあります。
「-s」は「skip」(スキップ)の略です。
どういうことかというと、このオプションをつけて「oil g admin」してやれば、すでに存在するファイルはそのままにして、今存在しないファイルだけを新規作成してくれるんですね。

例えば、新たに作りたいテーブルが「test」という名前だったとしたら、以下のような感じになります。

> oil g admin test field1:int field2:string[50] -s

フィールド名やその属性は適当です。このように、コマンドの末尾に「-s」をつけてやるだけで、さっき出てきたエラーを回避することができます。
また、こうすることによってそれまですでに作成していた管理画面のソースコードはそのまま残りますので、「テーブル追加したらこれまでの苦労が水の泡になった」的な悲劇を回避することができます。

なんのことはない話ですが、この「-s」オプションの存在を見つけるまで、わたしが調べ物に2時間も時間を費やしてしまったのは本当の話です。
つくづく、自分の問題解決能力の低さに呆れ果てました……。orz

2-1. カラム追加したいけどどうしたらいいの?

これも、わたしは少しだけ悩んでしまいました。
すでに「admin」を使って作成したテーブルに対してカラム追加したい時、どうしたら管理画面に反映されるのか、すぐにはわからなかったのです。

一番簡単なのは、一度「oil r migrate:down」して、マイグレーションファイルを手で修正してから再度「oil r migrate」してあげる方法ですが、これをやってしまうとすでに存在するデータベーステーブルが一度完全に消去されてしまいます。

わたしの場合、それはなんとか避けたい事態でした。
けっきょくどうしたかというと、少しめんどくさかったのですが、以下に書いた手順で対応しました。

2-2. カラム追加用のマイグレーションを実行してからソースコードを手修正

adminを使って自動生成されるものには、以下のものがあります。

  1. 「fuel/app/classes/controller/admin/」配下のコントローラクラス。
  2. 「fuel/app/classes/model/」配下のモデルクラス。
  3. 「fuel/app/migrations/」配下のマイグレーションファイル。
  4. 「fuel/app/views/admin/」配下のビューファイル。

つまり、すでに存在するデータベーステーブルにカラムを追加するとなると、これら全てに手を加えてあげる必要がありますね。非常にめんどくさいです。なんとかならないのかと色々調べましたが、わたしにはわかりませんでした。なので、以下のごとく力技で対応。

  1. 「oil g migration add_カラム名_to_テーブル名 カラム名:属性[属性値]」を普通に打って、カラム追加用のマイグレーションを作成する。
  2. 「oil r migrate」でマイグレーション実行。
  3. その後、「fuel/app/classes/controller/admin/」配下にすでに存在しているコントローラクラスに対して、追加したカラムに対応する修正をする。
  4. 「fuel/app/classes/model」配下のモデルクラスに対しても同様。
  5. 「fuel/app/views/admin/テーブル名/」配下のビューファイルに対しても同様。

ここまでして、ようやっと、adminで生成した管理画面から、追加したカラムに対する「参照」や「編集」が正常にできるようになりました。

3や4の手順に関しては、すでに存在している他のカラムの記述を参考にすれば、だいたいどの辺にコードを追記すればいいのかわかります。
厄介なのは5の手順で、views配下のファイルは複数修正しないとけないので注意が必要です。

具体的に言うと、「fuel/app/views/admin/テーブル名/」配下の以下の3つのファイルです。

  1. 「_form.php」ファイル
  2. 「index.php」ファイル
  3. 「view.php」ファイル

それぞれのファイル内における修正内容は、他のカラムの記述を参考にすれば修正できると思いますが、わたしの場合、そもそもこの3つのファイルに修正が必要ということに気付くまでに少しだけ時間がかかってしまいました。

けれど、一回でもやったことがあればもう大丈夫。
カラム一個追加するだけでけっこうな作業量になっちゃってめんどくさいですが、なんとかやっていけてます。

3. 他にいい方法あったら知りたいです

単純にデータベーステーブルにカラム追加して、それをadminで作った管理画面から操作できるようにしたいだけなんですが、こんなにめんどくさい操作になってしまうのは正直つらいです。

「カラム追加マイグレーションの追加」と「ソースコードの修正」を自動でやってくれるようなコマンドがあったらいいんですがね……。(どなたかご存じだったらお教え願います。 m(_ _)m )

はてさて。
またしても、言いたいことはどうってことないことなのにとんでもない量の紙幅を費やしてしまいました。

明日はもうちょっと楽しい記事が書けるといいなあ……。

ともあれ、最後までお読みくださってありがとうございました。m(_ _)m
最近すっかり日が変わったころに記事を投稿するようになってしまい、夜更かしが続いてお肌が荒れて来てしまったRyosukeでした。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバックURL: http://www.gunsturn.com/2015/05/20/fuelphp_use_admin/trackback/