Monthly Archives: November 2006

symfonyチュートリアル実践【第6日目】

6日目 セキュリティとフォームの値チェック(validation)。 この部分のコードを毎回自分で書くのが面倒だからこそ、フレームワークを使いたい、と自分は思ったわけです。 さて、まずは”Validation file”の指示に従いYAMLでapps/frontend/modules/user/validate/login.ymlにルールを書いていく。パスワードは5文字以上、というルールにsfStringValidatorというクラスを使っていますが、how to validate a formを見るとsfEmailValidatorとか正規表現が使えるsfRegexValidatorなどおよそ必要になりそうなクラスは揃っています。 デフォルトではここで書いたルールに反した入力があるとapps/frontend/modules/user/templates/loginError.phpが呼び出されるのですが、普通はログインのフォームにエラーメッセージを表示したいのでapps/frontend/modules/user/actions/actions.class.phpにhandleErrorLoginメソッドを書き加えます(”Error handling”)。 public function handleErrorLogin() { return sfView::SUCCESS; } return sfView::ERROR;にすればloginError.phpになる。 “Template error helpers”でapps/frontend/modules/user/templates/loginSuccess.phpの<div class="form-row">の部分を書き換えてエラーメッセージを表示できるようにする。 “Style errors”でweb/main.cssを書き換える、とあるが僕の環境ではweb/css/main.css。 “Authenticate a user”の項に入り、”Custom validator”で先ほどのlogin.ymlに修正を加える。5日目でapps/frontend/modules/user/actions/actions.class.phpのexecuteLoginで「nickname exists?」とコメントが入っている辺りにvalidation的な処理を入れたがそれをactionのクラスからcustom validatorに移動しよう、という修正。 定義したmyLoginValidatorを書く前に”Password storage”でデータベースに変更を加えておく。 $ symfony propel-build-model $ symfony propel-build-sql $ mysql askeet < data/sql/schema.sql “Password storage”と”Add password in the test data”は書かれている通りに実行。load_data.phpを実行する際にはsetPassword()もちゃんと呼ばれるようになっている。 “Custom validator”でいよいよmyLoginValidatorクラスを書く。保存するファイルはどこでもいいようだがチュートリアル通り、apps/frontend/lib/myLoginValidator.class.phpにした。 “Remove [...]

Posted in いじる | Leave a comment

PHP5とvimとctags

symfonyのたくさんあるメソッド名を入力時に補完したい!と思いctagsをいじる。 ctags -f symfony.tags `find /usr/share/pear/symfony/ -name ‘*.php’` vimの方の設定やctagsのオプションは以下のページを参照。 Vim で PHP 関数の辞書を作成する方法についてのメモ ところが補完したいと思った肝心の関数名addDescendingOrderByColumnがtagsのファイル内に見当たらず。 入っていたctagsは5.5.4だったのですが、最新版が5.6だったのでそちらをインストール。PHP5用のパッチもあるようなのでついでに。手順はこちらを参照。 Vim, CTAGS and PHP 5 これで無事addDescendingOrderByColumnもtagsに入り、補完できるようになりました。ただ、結局のところメソッドの名前がだらだらとリストになって出るだけなのでVisualStudio2005ほどの強力さはないです。

Posted in いじる | Leave a comment

symfonyチュートリアル実践【第5日目】

5日目 フォームとページャ。ログインの処理の解説がメインっぽい。 最初の段落で、昨日(4日目)は長くて大変だったよね、でもこの5日目をやれば元気になるよ!と励まされました。読者の気持ちがよくわかっているチュートリアルのようです。 $ symfony init-module frontend user でログインに必要なクラスの雛形(skeleton)が作られる。 “Create the user/login action”のところでapps/frontend/modules/user/actions/action.class.phpを開くとexecuteIndexというメソッドがすでに書かれているので、最初そこに書き足してしまいましたがexecute*Login*を追記しないとダメです。ブラウザで/user/loginにアクセスするとOops! We couldn’t find this page for you.と怒られます。 executeIndexの方は、apps/frontend/modules/user/templates/indexSuccess.phpと紐づいていて、 http://askeet/frontend_dev.php/user にアクセスすると表示される。executeTestを定義して、testSuccess.phpを作ると/user/testでアクセスできる。おぉ。少しわかった気がする。 この段階で/user/loginでフォームのボタンを押しても何も起きない。”Handle the login form submission”の箇所でexecuteLoginを再び書き換える。 ここでちょっと脱線。 puttyでvimを使っていると、ブラウザからのコピペはInsertモードにして右クリック、で先ほどまでやっていたのだがautoindentが効いたりその他諸々vimrcの設定が悪さして滅茶苦茶になる。ちょっと調べたら簡単な方法があった! #1 いまさらながら vim の基本小技 クリップボードにコピーした状態で、 :a ペーストする(puttyなので右クリック) Control-C, or ESC ペーストした後改行で終わらないとその行がペーストされないので注意。しかし今までnano起動したりvimrc読み込まないモードで起動していた自分はいったい。。 さて、無事executeLoginをコピペできると動くようになるのですがすでに登録されているnicknameがわからないので、、 $ mysql askeet mysql> select * from ask_user; で出てきたnicknameを入力すると無事ログイン&リファラーで前にいたページを取得してあるのでそのページにリダイレクト。パスワードは何でもOKです。 “Grant privileges”のところで言うのは、すべての動作を認証下に置く方法はチュートリアルの6日目でやるようです。 “Add the [...]

Posted in いじる | Leave a comment

友人がハッカーになるまで:自分のサービスを世に出す快感

検索レンズ  厳選サイトをまとめてサイト内検索 というサイトを友人がリリースしました。何はともあれ、自分で考えてつくったサービスを世に出す気持ちよさを理解する友人が増えたことに乾杯です。 彼はプログラミング歴は短いし本業ではないのですが、仕事のない休日にも嬉々としてプログラム書いちゃう人ならハッカーですよね。 ことの始まりは1年ぐらい前に、飲み会か何かの折に僕が「PHPは簡単だよー、3ヶ月あれば使えるようになる」とけしかけてその気になった彼にちょっと教えることになったのでした。ちなみにサンプル数の少ないアンケートによると、レゴブロックで小さい頃に遊んでいた人はプログラミングも好きになりやすいようです。 最初に出した課題は掛け算の九九表を出力せよ、です。81回printする不届き者もいますので10行で、が条件。結構難しい。PHPの場合、HTMLのtableで出力するのが簡単なので「24」の項を太字にする、を次の課題にすると必要な構文はだいたい使うことになります。今まで何人かに九九表を書いてもらいましたがそれなりにいい課題なのでは、と思ってます。 そんな感じでスタートしてからすでに1年経過していますが、リリースするのとしないのとではまさに0と1の差なので世に出せてよかったなぁ、と思います。これで人から評価される機会を得て、うまくいけば誰かが使ってくれてコメントを寄せてくれたりすればモチベーションが上がって発展していく、ステキなスパイラルに入ればしめたもの。 とまぁ、ちょうど5年前の今頃、PHPに初めて触れた日を思い出すのでした。ちゃんちゃん。

Posted in 感動する | 11 Comments

symfonyチュートリアル実践【第4日目続き】

4日目 4日目の続き。 フォーラムで検索すると同じエラーを出している人がいました。 Day 4 – PHP Fatal error チュートリアルのソースがあるレポジトリを見よ、と回答にあったので見てみた。 http://svn.askeet.com/tags/release_day_4/ 自動生成されるBaseQuestion.phpが違っていることが判明。となると自動生成の元になったconfig/schema.xmlが怪しい、と見比べてみると自分のと全然違う。symfonyのバージョンの違いのせいでしょうか。betaにした方が良かったかも、、と後悔しつつwgetでschema.xmlをダウンロードして自分のと置き換え。 $ symfony propel-build-model すると今度はちゃんとBaseQuestion.phpにgetInterestedUsersが定義されていました。 ただ今度は $ php batch/load_data.php こちらでエラー。 PHP Fatal error: Uncaught exception ‘PropelException’ with message ‘No connection params set for symfony’ データベースの名前が違うらしい。 前のschema.xmlを見ると以下のようになっていたので修正。 <database name="propel" defaultIdMethod="native"> $ symfony propel-build-sql $ mysql -u youruser -p askeet < data/sql/schema.sql $ php batch/load_data.php SQLを実行するときにdefault句が変でつまずいていたのがなくなった。schema.xmlは2日目のコピペなのだがバージョンによって動かないのかもしれない。 [...]

Posted in いじる | Leave a comment

ZUNEなWindowsXPのDesktop Theme(テーマ)スクリーンショット付

噂のZUNEがXPのテーマを配布していたので試してみました。 ダウンロードはこのページのZune Desktop Themeから。 GIGAZINEで紹介されていた、XPがなんとなくVista風になる隠しテーマ「Royale Noir」と似た感じ。スタートボタンが橙色です。 ZUNEについてはGIZMODEが詳しいです。 Zune Artsというサイトにはかっこいいプロモーションビデオがたくさん。 かっこいいテーマでは、以前友人に教えてもらったRoyale Themeが気に入っていました。画面のプロパティ上ではEnergy Blueという名前。

Posted in 感動する | 2 Comments

symfonyチュートリアル実践【第4日目途中】

4日目 何気に和訳も見つかりました。 4日目にしてタイトルが「リファクタリング」。もう?と思いましたがチュートリアルには見透かしたように You may think that it is too early to rewrite code that is only a few days old, but we’ll see how you feel about it at the end of this tutorial. とあるので黙って進みます。 “A quick look at the action”のところで、 public function executeShow () { $this->question = QuestionPeer::retrieveByPk($this->getRequestParameter(‘id’)); echo $this->getRequestParameter(‘myparam’); $this->forward404Unless($this->question); } とapps/frontend/modules/question/actions/actions.class.phpを編集すると [...]

Posted in いじる | Leave a comment

symfonyチュートリアル実践【第3日目】

3日目 MVCを理解しようということでいろいろいじる。書いてある通りにやっていればだいたい問題なし。 アクセスする先は、/ だとキャッシュが残っているのでfrontend_dev.phpの方にアクセス。キャッシュの消し方などはひとまず置いて先へ進む。 $ mkdir data/fixtures $ nano data/fixtures/test_data.yml $ nano batch/load_data.php $ php batch/load_data.php Batch skeletonにData importのPHPのコードも書き加えておく。 テーブルに入ったデータをDELETEされたくないときは$data->setDeleteCurrentData(false);を加えるといいらしい。 前回のテーブルでちょっと不備があったので以下のようなエラーが。 PHP Fatal error: Uncaught exception ‘PropelException’ with message ‘Unable to perform DELETE ALL operation. [wrapped: Could not execute update [Native Error: Table 'askeet.ask_interest' doesn't exist] [User Info: DELETE FROM ask_interest]]’ in /usr/share/pear/symfony/vendor/propel/util/BasePeer.php:218 Stack trace: [...]

Posted in いじる | Leave a comment

Page optimized by WP Minify WordPress Plugin