Zend Studio 7 と Komodo 5 で cake を編集

10 views
Skip to first unread message

custar

unread,
Aug 7, 2009, 2:19:05 AM8/7/09
to CakePHP-ja
Zend Studio 7 が出たので cake を編集してみました。

- Zend Studio 7.0
http://www.zend.com/en/products/studio/compare-studio55

custar

unread,
Aug 7, 2009, 2:19:43 AM8/7/09
to CakePHP-ja
zend studio のベースとして eclipse を使い始めてから、
あの perspective が面倒で相変わらずうんざりです。
これなら v5.5 がよっぽど良かった。

custar

unread,
Aug 7, 2009, 2:20:15 AM8/7/09
to CakePHP-ja
PHP Web Page によるデバッグで気になったのが、
v6 までは "Run To Line" が有効だったのだが、
v7 では無効になってしまっていること。

未だ解決方法が分からない。

custar

unread,
Aug 7, 2009, 2:20:33 AM8/7/09
to CakePHP-ja
zend studio において Controller 内で編集を行う時、
Model 名や Component 名が $this-> の後に出てこない。
$html や $form などの helper も然り (しかり)。

zend studio で cake のオブジェクトを code assist で出すためには、
事前に宣言しておかないと効かなかったと思う。
これが行えない IDE は有り難くない。

custar

unread,
Aug 7, 2009, 2:22:20 AM8/7/09
to CakePHP-ja
ついでに Komodo IDE 5.1 も試してみました。

- Komodo IDE 5.1
http://www.activestate.com/komodo_edit/comparison/

custar

unread,
Aug 7, 2009, 2:22:50 AM8/7/09
to CakePHP-ja
eclipse のしっくりこないデザインよりもまだまし。

でも、数年前 php を使い始めた頃から不満だった debug pane が下部に固定さ
れているのが、未だそのまま。変数が一覧できない。

variables と callstack を同一 pane で表示させたいから、下部に配置しているんだろうけど、
callstack は別な tab にすればいいのに。

custar

unread,
Aug 7, 2009, 2:23:30 AM8/7/09
to CakePHP-ja
firefox-like な Add-ons で cakephp 用をインストールすると、
zend で面倒だった cake のオブジェクトがあっさり code assist された。
これが結構嬉しい。

custar

unread,
Aug 7, 2009, 2:25:02 AM8/7/09
to CakePHP-ja
デバッグのペイン配置が嫌いだけど、code assist は買いだから、
open source の Komodo Edit を試してみました。

- Komodo Edit
http://www.activestate.com/komodo_edit/comparison/

custar

unread,
Aug 7, 2009, 2:28:06 AM8/7/09
to CakePHP-ja
cakephp add-on も有効で、code assist も効きている。
font に consolas を指定してもきちんと表示してくれる。

デバッグは行えないが、ザクザク書くにはこれで十分かもしれません。

custar

unread,
Aug 7, 2009, 2:30:44 AM8/7/09
to CakePHP-ja
更についでで、NetBeans の最新版を試してみた。

見掛けが汚かったので、使い出す前にアンインストール。
cakephp のサポートで一票入れたけど、これは気持ち良くない。

custar

unread,
Aug 7, 2009, 4:29:46 AM8/7/09
to CakePHP-ja
Tweak UI という extension がある。
debug tab を右 pane に移動できるが、
Locals と SuperGlobals の変数を表示するタブが消えてしまう。

しかも、callstack は従来通りなので、表示領域が横長となり
右ペインに入り切れない。

custar

unread,
Aug 7, 2009, 4:49:33 AM8/7/09
to CakePHP-ja
- Programming CakePHP Apps with Komodo IDE
http://www.pseudocoder.com/archives/2009/02/25/programming-cakephp-app-with-komodo-ide/

cakephp.jp でも紹介されていたページ。

custar

unread,
Aug 7, 2009, 4:51:38 AM8/7/09
to CakePHP-ja
extension は xul と python で作られてた。
読めなくはないが、作れない。

zend framework integration て extension があるが、
どんな動きをするのか?

custar

unread,
Aug 7, 2009, 6:10:44 AM8/7/09
to CakePHP-ja
Component の中で、$controller-> としても code assist が効かなかった。

addon のソースを見る限り、
M,C,V ごとのファイルは解析されているが、
Componet は解析されていないから、かな。

custar

unread,
Aug 7, 2009, 6:32:22 AM8/7/09
to CakePHP-ja
Component から追加した helper も出てこない。

custar

unread,
Aug 7, 2009, 10:45:26 PM8/7/09
to CakePHP-ja
AppController で設定した AuthComponent を
子 Controller で呼び出せない。

単純な M,C,V のファイルで分かる範囲のオブジェクトのみが保管可能の様だ。

extension のソースを読んでみたが、
単複同形の名詞や例外的複数形では autocomplete が効かないと思われる。
単数名詞に 's' を付けただけで複数形と決め打ちしているようだから。
要確認。

custar

unread,
Aug 8, 2009, 12:17:30 AM8/8/09
to CakePHP-ja
Company Model が "Companie" と出てくる。

単数形に "s" を付けるのではなく、
複数形から "s" を引いてるだけかな?

custar

unread,
Aug 8, 2009, 5:19:20 AM8/8/09
to CakePHP-ja
下記 python 版 Inflector を extension に組み込むと、
Controller は複数形で、
Model は単数形で呼び出せるようになった。

- Python Inflector
http://www.bermi.org/inflector/download

custar

unread,
Aug 8, 2009, 5:24:09 AM8/8/09
to CakePHP-ja
extension の作り方。

- Extension Development
http://wiki.openkomodo.com/index.php/Extension_Development

余り役に立たなかった。

custar

unread,
Aug 8, 2009, 5:31:40 AM8/8/09
to CakePHP-ja
python ソースには、belongTs と hasOne の記述しかない。
hasMany や habtm は未対応?

試そうにも、B hasOne C の時の $this->B->"C" の C が出てこない。
v5.1 では駄目か?

screencast と同じ v4.4 で試すには以下から入手。

- ActiveState Downloads
http://downloads.activestate.com/Komodo/releases/

custar

unread,
Aug 8, 2009, 9:55:23 PM8/8/09
to CakePHP-ja
- Code Intelligence in Komodo
http://www.python.org/community/pycon/dc2004/papers/54/komodo_codeintel.pdf

- Komodo file locations
http://community.activestate.com/faq/komodo-file-locations#log_files

| Where does Komodo log output and errors?
|
| There are two files "pystderr.log" and "pystdout.log".
|
| Within the user data directory is the host data directory (host-
<hostname>).
| These files are extremely useful for troubleshooting problems with
Komodo
| and are often requested when logging bug reports.
|
| Windows 2000 and XP:
| C:\Documents and Settings\<username>\Application Data\ActiveState
\Komodo[IDE|Edit]\<version>\host-<hostname>\pystd[err|out].log
|
| Windows Vista:
| C:\Users\<user>\AppData\Roaming\ActiveState\Komodo[IDE|Edit]
\<version>\host-<hostname>\pystd[err|out].log

Application Data/ActiveState/KomodoEdit/5.1/host-.../codeintel/db/
php/...
|
| <scope ilk="blob" lang="PHP" name="b.php" src="C:/xampp/htdocs/
cake_1.2.4.8284/app/models/b.php">
| <scope classrefs="AppModel" ilk="class" line="2" lineend="37"
name="B">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="7" name="validate" />
| <variable citdl="array()" line="19" name="hasOne" />
| <variable citdl="array()" line="35" name="hasMany" />
| </scope>
| </scope>
|
| <scope ilk="blob" lang="PHP" name="c.php" src="C:/xampp/htdocs/
cake_1.2.4.8284/app/models/c.php">
| <scope classrefs="AppModel" ilk="class" line="2" lineend="21"
name="C">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="8" name="validate" />
| <variable citdl="array()" line="19" name="belongsTo" />
| </scope>
| </scope>
|
| <scope ilk="blob" lang="PHP" name="d.php" src="C:/xampp/htdocs/
cake_1.2.4.8284/app/models/d.php">
| <scope classrefs="AppModel" ilk="class" line="2" lineend="21"
name="D">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="8" name="validate" />
| <variable citdl="array()" line="19" name="belongsTo" />
| </scope>
| </scope>
|
|
|
| <scope ilk="blob" lang="PHP" name="bs_controller.php" src="C:/xampp/
htdocs/cake_1.2.4.8284/app/controllers/bs_controller.php">
| <scope classrefs="AppController" ilk="class" line="2" lineend="61"
name="BsController">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="5" name="helpers" />
| <scope ilk="function" line="7" lineend="10" name="index"
signature="index()" />
| <scope ilk="function" line="12" lineend="18" name="view"
signature="view(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| <scope ilk="function" line="20" lineend="30" name="add"
signature="add()" />
| <scope ilk="function" line="32" lineend="48" name="edit"
signature="edit(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| <variable citdl="this.B.read()" line="46" name="data" />
| <scope ilk="function" line="50" lineend="59" name="delete"
signature="delete(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| </scope>
| </scope>
|
| <scope ilk="blob" lang="PHP" name="cs_controller.php" src="C:/xampp/
htdocs/cake_1.2.4.8284/app/controllers/cs_controller.php">
| <scope classrefs="AppController" ilk="class" line="2" lineend="65"
name="CsController">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="5" name="helpers" />
| <scope ilk="function" line="7" lineend="10" name="index"
signature="index()" />
| <scope ilk="function" line="12" lineend="18" name="view"
signature="view(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| <scope ilk="function" line="20" lineend="32" name="add"
signature="add()">
| <variable citdl="this.C.B.find()" line="30" name="bs" />
| </scope>
| <scope ilk="function" line="34" lineend="52" name="edit"
signature="edit(id=null)">
| <variable default="null" ilk="argument" name="id" />
| <variable citdl="this.C.B.find()" line="50" name="bs" />
| </scope>
| <variable citdl="this.C.read()" line="48" name="data" />
| <scope ilk="function" line="54" lineend="63" name="delete"
signature="delete(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| </scope>
| </scope>
|
| <scope ilk="blob" lang="PHP" name="ds_controller.php" src="C:/xampp/
htdocs/cake_1.2.4.8284/app/controllers/ds_controller.php">
| <scope classrefs="AppController" ilk="class" line="2" lineend="65"
name="DsController">
| <variable citdl="string" line="4" name="name" />
| <variable citdl="array()" line="5" name="helpers" />
| <scope ilk="function" line="7" lineend="10" name="index"
signature="index()" />
| <scope ilk="function" line="12" lineend="18" name="view"
signature="view(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| <scope ilk="function" line="20" lineend="32" name="add"
signature="add()">
| <variable citdl="this.D.B.find()" line="30" name="bs" />
| </scope>
| <scope ilk="function" line="34" lineend="52" name="edit"
signature="edit(id=null)">
| <variable default="null" ilk="argument" name="id" />
| <variable citdl="this.D.B.find()" line="50" name="bs" />
| </scope>
| <variable citdl="this.D.read()" line="48" name="data" />
| <scope ilk="function" line="54" lineend="63" name="delete"
signature="delete(id=null)">
| <variable default="null" ilk="argument" name="id" />
| </scope>
| </scope>
| </scope>

custar

unread,
Aug 9, 2009, 5:16:31 AM8/9/09
to CakePHP-ja
(1) 改行コードの処理
(2) hasOne, hasMany, belongsTo, habtm 対応の正規表現の追加

を施すと、cakephp 1.2.x でも
associations に応じた Model の autocomplete が効くようになった。

(1) は Windows だからかな?

$this->B->"C" の C が出なかったのは、改行コードの所為が大きかった。
なんか、python 初心者になってきた。

custar

unread,
Aug 12, 2009, 5:51:26 AM8/12/09
to CakePHP-ja
public $components = array('Email', 'Cookie')

のような簡単な形式であれば Component も auto-complete が効くようにできた。

でも、この extension の仕組みではいずれ行き詰る。
Visual Studio のレベルにまでならないものかなぁ。

custar

unread,
Aug 12, 2009, 10:42:19 PM8/12/09
to CakePHP-ja
所詮 blob ファイルは xml もどきなんだから、
python で xml として解釈・処理した方が楽だろ。

- 魅力的なPython: XMLとPythonのあれこれ
http://www.ibm.com/developerworks/jp/linux/library/l-python1/

| XML 文書は通常、制御が多く複雑なデータ構造でエンコードされますので、
| "行を読んでそれらを正規表現と比較する" というおなじみのスタイルのテキスト処理では、
| XML を適切に構文解析して処理するには適しません。

そう、まさしく正規表現による文字列処理を cakephp extension では行っていた。
やってられない。

| Python は、....
| 複雑なデータ構造 (通常はクラスや属性がある) を処理する分かりやすい方法と、
| XML の構文解析、処理、および生成に役立つ一連の XML 関連モジュールの両方を備えています。

なら、そっちで情報処理した方が楽。

後、komodo のイベントを一覧できる資料はないものか。

custar

unread,
Aug 12, 2009, 11:03:25 PM8/12/09
to CakePHP-ja
blob で分かるのは、オブジェクト内要素の属性程度まで。
その設定値は記述されていない。
その設定値はソースコードにしかない。

となると、php ファイルを python でパースする必要がある。
一案としては以下のものもある。

- phppython
http://code.google.com/p/phppython/

できるかなぁ?

python 初心者がどこまでできるやら。

custar

unread,
Aug 12, 2009, 11:07:32 PM8/12/09
to CakePHP-ja
勘違い。

extension の中でも xml を構文解析して node として扱っていた。
その後の、php ソースの扱いが面倒なんだった。

custar

unread,
Aug 13, 2009, 1:25:24 AM8/13/09
to CakePHP-ja
- ply
http://code.google.com/p/ply/

- PLY (Python Lex-Yacc)
http://www.dabeaz.com/ply/

- zend_language_parser.y
http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/Zend/zend_language_parser.y?view=markup

- PLY (Python Lex-Yacc) で作る Algol 60 処理系
http://www.okisoft.co.jp/esc/ply-algol/index.html

- C++ Header Parser written in python
http://sourceforge.jp/projects/sfnet_cppheaderparser/

- 魅力的なPython: 宣言型ミニ言語の作成
http://www.ibm.com/developerworks/jp/linux/library/l-cpdec/index.html

- 魅力的なPython: Sparkモジュールを使った構文解析
http://www.ibm.com/developerworks/jp/linux/library/l-spark/index.html

- 魅力的なPython: SimpleParseモジュールを使った構文解析
http://www.ibm.com/developerworks/jp/linux/library/l-simple/

- indentphp
http://code.google.com/p/indentphp/source/browse/trunk/indentphp.py

custar

unread,
Aug 22, 2009, 11:30:45 AM8/22/09
to CakePHP-ja
blob の作成時に lex-yacc は komodo 内部で済んでいる。

komodo の python ソースを読み、
php ソースのパース時に array() の要素も blob に含ませられないか、と調べたが、
かなり ソースを弄 (いじ) ることになるので却下。

class, argument などのキーワードは予約されているが、
array() の要素を表す語は登録されていなかった。
Reply all
Reply to author
Forward
0 new messages