質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

2333閲覧

FuelPHP php oil generateで生成されるファイルの場所を、任意の場所に変更したい

earnest_gay

総合スコア615

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2018/03/11 15:20

編集2018/03/14 14:22

題名の通りなのですが、php oil g modelを実行すると通常は/fuel/app/classes/modelに生成されます。

しかし、moduleを使っているため
fuel/app/modules/provide/classes/modelに生成させたいのですが、どこで設定するのでしょうか。

「fuelphp module oil model 場所 変更」
で探してるのですがなかなか情報が見当たらず。。。

追記
もしかして設定変更できない?
oilファイルから分析してみました。

public static function model($args, $build = true) { $singular = \Inflector::singularize(\Str::lower(array_shift($args))); if (empty($singular) or strpos($singular, ':')) { throw new Exception("Command is invalid.".PHP_EOL."\tphp oil g model <modelname> [<fieldname1>:<type1> |<fieldname2>:<type2> |..]"); } if (empty($args)) { throw new Exception('No fields have been provided, the model will not know how to build the table.'); } $plural = \Cli::option('singular') ? $singular : \Inflector::pluralize($singular); $filename = trim(str_replace(array('_', '-'), DS, $singular), DS); $base_path = APPPATH; if ($module = \Cli::option('module')) { if ( ! ($base_path = \Module::exists($module)) ) { throw new Exception('Module '.$module.' was not found within any of the defined module paths'); } $module_namespace = ucwords($module); } // こいつを発見。 $filepath = $base_path.'classes'.DS.'model'.DS.$filename.'.php';

該当箇所を$filepath = $base_path.'modules'.DS.$filename.'.php';に修正してみるとmodel生成場所が変わりました。

configフォルダ配下に何かしらのファイル持ってきてdb.phpみたいな感じで上書きするのかなぁーとか思ってたんですが
ハードコーディングされてるし、イメージと違うのか、、、

このファイルってfuel/packages/oil/classes/generate.phpでパッケージに入ってるんで、ちょっと悩みます。
僕はpackagesやvendorはgit管理していないので、model生成場所がハードコーディングされている以上、対応できないですね。。。

未検証だけど、fuel/packages/oil/classes/generate.phpでのmodel生成場所を修正してgit管理したところで多分、composer updateしたらgit管理しているfuel/packages/oil/classes/generate.phpが上書きされてしまう気がする。

なにか方法はないものか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ファイル生成場所がコマンドによる指定に対応していない為、独自がoilを拡張。

fuel/packages/oilを拡張して解決。
fuel/packages/oil自体を拡張してgit管理しても新規端末からのgit clone時のcomposer updateによってfuel/packages/oilが上書きされてしまうため意味がない。

なので、fuel/packages/oilをfuel/packages/materialなどという感じでまるごとコピー。
このfuel/packages/materialはgit管理対象とする。

あとは独自コマンドに対応する$_SERVER['argv']を既存のoilファイルで判定して独自コマンドがあればでfuel/packages/materialを使うようにする。

// Boot the app require APPPATH.'bootstrap.php'; // Load oil package \Package::load('oil'); \Package::load('material'); // Generation Directory Change(gdc or GDC) $original_commands = [ '--gdc', '--GDC' ]; $is_proprietary_processing = false; foreach ($original_commands as $original_command) { if($is_proprietary_processing) { break; } // 独自コマンドがあるかチェック。 $is_proprietary_processing = in_array($original_command, $_SERVER['argv']); } if ($is_proprietary_processing) { \Material\Command::init($_SERVER['argv']); } else { // Fire up the command line interfact \Oil\Command::init($_SERVER['argv']); }

service層など独自の層があるなら独自コマンドを受け取って、下記ファイルで判定してGenerate::create()で生成場所を指定したりすればやりたいことの完成。

fuel/packages/material/classes/generate.php
fuel/packages/material/classes/generate/scaffold.php

MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$ php oil g scaffold monkey name:string description:text -f --with-presenter --gdc string(125) "/Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/packages/material/views/scaffolding/template.php" Creating migration: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/migrations/001_create_monkeys.php Creating model: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/provide/classes/model/app/monkey.php Creating controller: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/classes/controller/monkey.php Creating view: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/views/monkey/index.php Creating view: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/views/monkey/view.php Creating view: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/views/monkey/create.php Creating view: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/views/monkey/edit.php Creating view: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/modules/web/views/monkey/_form.php MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$ php oil r migrate Performed migrations for app:default: 001_create_monkeys MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$ php oil r migrate:down Reverted migrations for app:default: - 001_create_monkeys MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$

投稿2018/03/14 13:44

編集2018/03/14 14:22
earnest_gay

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問