昔、fuelphpのoil自動生成でphpdocを自動で書くようにするという記事を書きましたが、これでもだんだん不満に思ってきて、より便利な物を作りました。

補完ができるのとできないのでは開発効率も違いますし、何よりストレスがかからなくなるので重要です。

前作ったものの不満点

ちょっとだけ作った経緯を書いておきます。
昔作ったものは自分でもいいなと思って作ったわけですが、

  • 既存のソースを変更する必要がある
  • modelを作成するときにしか使えない

と、案外不満点がありました。
しかし、FuelPHP、コード補完用コード生成コードの記事を見て、taskで作ればいいのかと思い、新たに作成しました。

補完するもの

作成したtaskは単純にmodelのクラス宣言の直前にphpdocをつけるだけのものです。
モデルフォルダのファイル一覧を撮ってきて、それぞれのファイルにphpdocを強制的につけます。
phpdocの中身としては、

  • モデルの持つpropertyの定義
  • forgeでの返り値の型がそのモデルになるようにforgeのメソッド定義

の2種類です。

おもに自分の環境(netbeans用)として作ってますが、phpdocは共通のはずなので
phpdocをベースに補完してくれるどのエディタでも使えるはずです。

ソースコード

まえがきが長くなりましたが、こちらが作ったtaskです。
app/tasksの下にmodelproperty.phpで作ってください。

[php]
<?php
namespace Fuel\Tasks;

class ModelProperty{
public static function run(){
$modelFiles = \File::read_dir(APPPATH . "classes/model", 0, array(
‘\.php$’ => ‘file’,
));

foreach($modelFiles as $filename){
if(is_string($filename)){
self::addProperty(APPPATH . "classes/model/",$filename);
}
}
}

public static function addProperty($dir,$filename){
$fileString = \File::read($dir . $filename,true);
$className = self::getClassName($fileString);
if(!$className)return;

$output = "<?php" . PHP_EOL;
$output .= "/**" . PHP_EOL;
$properties = $className::properties();
foreach($properties as $name => $detail){
$output.= ‘ * @property ‘;
if(isset($detail['type'])){
$output .= $detail['type'] . " ";
}
$output .= ‘$’ . $name . PHP_EOL;
}
$output .= " *" . PHP_EOL;
$output .= ‘ * @method ‘.$className.’ forge($data = array(), $new = true, $view = null)’ . PHP_EOL;
$output .= " **/" . PHP_EOL;
$output .= "class";

$replacedString = preg_replace("/<\\?php(.|\n)*class/mi",$output, $fileString);

\File::update($dir,$filename,$replacedString);
}

private static function getClassName($string){
$matches = array();
preg_match("/class\\s(\\S+)\\sextends/", $string, $matches);
return isset($matches[1]) ? $matches[1] : NULL;
}

}
[/php]

実行は単純に呼ぶだけで、引数等もありません。
[plain]
php oil r modelproperty
[/plain]

注意点として、phpdocがすでに書かれていた場合上書きします。
phpdoc以外に<?phpとclass Model_xxxの間に何か書かれてた場合にはそれは消されます。

netbeansでfuelphpを使ってて補完ができない!といらいらする方、ご活用ください

 

2 Responses to fuelphpのmodelに補完用のphpdocをつける

  1. mojacode より:

    PHPStorm使いですが、補完できるようになりました。
    ありがとうございます!
    1点だけ、正規表現のclassの前に^をつけた方が良いかと思いました。
    クラス宣言の後のコード中にclassという文字列があって、そこまで消されてしまいましたので。
    $replacedString = preg_replace(“/<\\?php(.|\n)*^class/mi",$output, $fileString);

    • wicket より:

      PHPStormでも使えましたか!よかったです!
      正規表現の情報もありがとうございます。
      自分では消えてるの全然気づきませんでした^^;

wicket にコメントする コメントをキャンセル

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>