symfony1.2でのカスタムタスク
標準ではtask上でsfContextを使えないので、
executeメソッド内で
sfContext::createInstance($this->configuration);
とかやっていたのですがこのままでは使えない状況が…。
CLIからtaskを実行する分にはこれでいけるのですが、
actionなどからtaskをrunする場合はこれだと
Catchable fatal error: Argument 1 passed to sfContext::createInstance() must be an instance of sfApplicationConfiguration, instance of ProjectConfiguration given
っていうエラーが表示されてしまいます。
ようはエントリポイントのPHPでもう既にcreateInstanceしているからダメということですね。
sfContextのメソッドを調べてみるとhasInstanceというメソッドを発見。
なので上記の一行を
if(!sfContext::hasInstance()) sfContext::createInstance($this->configuration);
に変えてあげると無事エラーは表示されなくなりました!!
こういう情報ってあんまりWeb上にないのでソース読むしかないんですよね。
こういう細かいところで躓くことが多いsymfony1.2なのですが、
情報がやっぱ少ないなぁ…。
sfForm周りとかも。。。
まあ、自分で調べて分かったことはここにボチボチ書いていこうかと思っています。
TextMate command with JSLint
TextMate上でいま開いている.jsファイルをJSLintを使ってsyntax checkしようという話し。
spicermonkeyでJSLintを動かそうとしたけどうまくいかなかったので、
Rhinoのjs.jarを使って動かすようにしました。
$ wget ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R2.zip |unzip $ cp rhino1_7R2/js.jar ~/Dropbox/lib
次に以下のサイトを参考にJSLintをダウンロードします。
JSLint and Rhino http://jslint.com/rhino/index.html
$ curl http://jslint.com/rhino/jslint.js > ~/Dropbox/lib
すると以下のようなコマンドで任意の.jsファイルをsyntax checkできるようになります。
$ java -jar ~/Dropbox/lib/js.jar ~/Dropbox/lib/jslint.js myprogram.js
あとはこれをTMCommandにするだけです。
TextMateを開いてBundles->Bundle Editor->Edit Commandsを開きます。
Javascript Bundleの中で+ボタンを押してCommandを追加します。
名前はJSLintとか適当に打ち込んでCommand欄に以下のコマンドを入れます。
java -jar ~/Dropbox/lib/js.jar ~/Dropbox/lib/jslint.js "$TM_FILEPATH"
KeyActivationに適当なショートカットキーを入力(Ctr+Cmd+Lなど)し、
Source Selectorをsource.jsとすると.jsファイルを開いたときだけ、
このコマンドを有効にすることができます。
jQueryなどのライブラリを使っていると、
変なところでエラーになってしまう場合もありますが、
基本的な構文を忘れてしまった場合などは結構使えます。