Laravel4、シンプルなコード補完コード

タグ: Laravel4   NetBeans  

Laravel4にはIDEやエディター向きの補完コードが先を争って発表されています。

私はNetBeansユーザーで、既にNetBeansで動作すると言われているコード補完コードを使ってみましたが、動作しません。多分、NetBeansのオプション設定も関係しているのでしょう。

そして何より、面倒です。どうして面倒な事が好きなんでしょうね。

仕方がないので、結局自分で補完コード生成コードを作成しました。動作確認はNetBeansです。ですが、他のIDEやエディターに合わせ、改良するのも簡単です。とても単純なコードです。

routes.phpに付け加え、設定したルートにアクセスしてください。このコードの場合'/ccc'にアクセスすれば、生成コードが表示されます。お好きな場所へphpコードとして保存してください。

  1. /*
  2. * 製作者:Hirohisa Kawase
  3. * このプログラムの権利は放棄します。商業利用/非営利にかかわらず、自由に改変/配布可能です。
  4. * 製作者の名前を残す必要もありません。ライセンスを付け加えることも可能です。
  5. * 権利放棄日時:2013-05-30 日本時間
  6. */
  7. Route::get( '/ccc', function()
  8. {
  9. $aliasLoader = AliasLoader::getInstance();
  10.  
  11. $aliases = $aliasLoader->getAliases();
  12.  
  13. $outputLines = '<?php<br>';
  14.  
  15. foreach( $aliases as $key => $fullNamespaceNotInUse )
  16. {
  17. $reflectionClass = new ReflectionClass( $key );
  18.  
  19. if( $reflectionClass->hasMethod( 'getFacadeRoot' ) )
  20. {
  21. $instance = $key::getFacadeRoot();
  22.  
  23. $reflectionClass = new ReflectionClass( $instance );
  24. }
  25.  
  26. if( $reflectionClass->isInstantiable() )
  27. {
  28. $name = 'class '.$key.' extends '.$reflectionClass->getName().'{}';
  29. }
  30. elseif( $reflectionClass->isAbstract() )
  31. {
  32. $name = 'abstract class '.$key.' extends '.$reflectionClass->getName().' {}';
  33. }
  34. else
  35. {
  36. $name = '// not sure about '.$key.' Class';
  37. }
  38.  
  39. $outputLines .= $name.'<br>';
  40. }
  41. return $outputLines;
  42. } );

やっぱり、コード補完はあるとないとじゃ雲泥の差ですね。便利だ。

修正

自動では100%上手く行きません。生成結果は多少自分で変更したほうが便利です。生成結果はドライバーの設定を反映しているものがあるため、自分の環境で生成したコードをもとに変更をかけたほうが良いでしょう。

以下は修正箇所の例です。

  1. // Guardクラスが良い
  2. class Auth extends Illuminate\Auth\Guard{}
  3.  
  4. // Builderクラスが良い
  5. class DB extends Illuminate\Database\Database\Query\Builder{}
  6.  
  7. // Factoryにはmakeが含まれているが、チェックの関数は含まれていない
  8. class Validator extends Illuminate\Validation\Factory{
  9. public function passes();
  10. public function fails();
  11. }