カテゴリー : 2013年 5月

ベトナムはハノイに出張中

お元気ですか、紅緒です。ハイカラさんと呼んでください・・
冗談はさておき、日曜からベトナムハノイへ6月初めの水曜まで出張してます。
オフショア開発の会社さんの中でプログラム叩いたり、お互い改修に関する不明点を通訳さん介して仕事したりしてまする。

ちなみにハノイ、この時期は雨期なんですが現在あまり雨も降っておらず。
温度は最高気温40度とか、なかなか殺しに掛かってますが建物の中は割とクーラーが効いてて快適だったり。
そして飯がうまい!以前ホーチミンへ行ったときはちょっとなぁあ・・と思ってましたが、現地の方がよく食べてる所を紹介してもらっていくと、これがうまいのなんの。
空芯菜の炒め物、生春巻、コロッケ的な何か、亀(すっぽんみたいな変な亀 から揚げとかで出てきます)
なかなかに快適です。ビールうまいし。

今回は仕事がメインなので、なかなか写真を撮影する機会はないですが、少しだけでも撮った奴は帰国後にうpしましょう。



さて、ここからはPHPのお話に戻りまして。
新規機能を開発していく中で、とりあえずバリデーションを通す事を第一目標にしていた為に起きた問題です。
共通機能の多い、他の機能よりhogeForm.classの内容をほぼコピーしてきて、当面はイラネ(゚⊿゚)とほぼ全てのバリデーションををコメントアウトしていたのですが
DBに保存したときに、なぜか値が0埋めだったりしてる。。
Save()メソッドの手前で変数をインスペクションしたら、_dataの中はなぜかDoctrine_Null…
なんやねん!もう!!と思ってたら、Validatorをsetしていなかったのが問題でした。

class HogeForm extends BaseHogeForm
{
  public function configure()
  {
    $this->setWidget('hogehoge_name', new sfWidgetFormInputText());
    $this->setWidget('hogehoge_comment', new sfWidgetFormInputText());
    //使う項目の種類とか記述(sfWidgetFormInputText,sfWidgetFormChoiceとか)
    //Baseの項目をオーバーライドする
    
    $this->setValidators(array(
            'hogehoge_name'     => new sfValidatorString(array('max_length' => 30), array(
                'max_length'    => '名前が長すぎるよ小沢さん'
            )),
            //ここでバリデータをセットする。
            'hogehoge_comment'  => new sfValidatorString(array('max_length' => 150, 'required' => false), array(
                'max_length'    => 'コメントが長すぎるよ小沢さん'
            ))
    ));
  }
}
こんな感じ。

くそー、、変なところでハマってしまった。。


詰まってる

こんばんは。ベトナムには日曜の朝8時の便で行ってきます。
帰国は翌週水曜日になるかと。
その日はお休みなので、李君の引越し祝いじゃないけど、おみやげの珈琲でももっておじゃまするかおじゃまされるかしようと思ってるとっくんです。

さてはて、ここ最近既存のプログラムにバグが見つかり改修を進めてるのですが、ちょっと詰まってます。

なぜか

$q = this->findOneByHogeIdAndHugaName($hogeid, $huganame);
として引っ張ってきた物を
$q->setOption($option);
$q->save();
として流してるのだが、コレが一向に改善されない。。
PrimaryがIDではなくhogeidとhuganameという複合主キーとなってるんですが、同じhogeidの別のhuganame、全部が更新されてしまうという。

明日もコレで悩みそうだ。


Symfonyでの項目追加

ふと項目の追加とかページの追加作業を行っている時に、別のタスクを処理してどこまでやってたかを時々忘れてしまうとっくんです。
こんばんは。
今回は項目追加について少しだけ。
そして、びみょーに動作が人によって違うかもしれません。ご了承下さいましー。


今回も完全にSymfony周辺をいじくる覚書です。
とりあえずDBにカラムを追加

ALTER TABLE customers ADD COLUMN hogehoge varchar(255)  AFTER hoge;
//テーブルcustomersのカラムhogeの後に、hogehogeというカラムを追加


そこからコマンドラインでschema.ymlを生成すればOK
symfony doctrine:build-schema
・・・のはずが今日はここでエラーが出た。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 'order' at line 1.
Failing Query: "DESCRIBE order"
おお・・・?なんぞや?と思ったら「order」って予約語じゃねーかバーロー


予約語に関しては以下の公式リファレンスをご確認ください。

8.3. MySQLでの予約語の扱い
意外にもCONVERTとかはOKだったりする。

此方のページでも予約語についていろいろ書かれてますのでよろしければどうぞ。

MySQLで使ってはいけないワード一覧 – Layer8



一応・・・出来ないことはないけど、後々バグの温床になるのはねげれなので、大人しくテーブル名を変更する。
ALTER TABLE `order` RENAME TO orders;
//シングルクウォートで囲むと予約語をカラム扱いしてくれる
上はあくまで一例ですが、シングルクウォートで囲んでやれば問題なくSQLが通ります。
ほいリネーム完了!そして難なくschemaの生成に成功。


次にDoctrine先生にModel部分を自動生成してもらいましょう。同じくコマンドラインで操作です。
symfony doctrine:build-model
これで見事、MyProject>model>form>doctrine>baseのディレクトリに自動生成されるBaseHuga.classが生成されました。
あとは、それをオーバーライドする子クラスを一つ上の階層MyProject>model>form>doctrineにHuga.Classを作成してやればOKですたい。



ついでにModuleも作成しちゃいましょうかね。コマンドライン操作です。
symfony generate:module frontend huga
これで無事、ほぼまっさらなhugaというページが生成されました。
※正確にはtempletes>indexSuccess.php(View側)とactions>actions.class(Controller)が生成されます。




大体そんな感じ。
ギャグ漫画日和┫・∀・┣
そして改行プラグインいれなめっちゃ見づらいやんけ。


Symfony-Doctrineを使ってSelect

ちょこっとメモ的なやつ。
Symfony DoctrineでのDQL発行的な。
普通のAndWhereでのSelectです。

たとえば事前に

$corp['corp_no'] = '000001';
$hoge['huga'] = 'foo';
とか値を持ってたとする(あくまでSQLで引っ張ってきた想定で。)

$query =  Doctrine::getTable('Customer')->createQuery('ct');
$customer = $query->select('
	ct.name as name,
	ct.tel as tel,
	ct.fax as fax
')
->where('ct.no = ?', $corp['corp_no'])
->andWhere('ct.hogehoge = ?', $hoge['huga'])
->fetchOne(array() ,Doctrine_Core::HYDRATE_ARRAY);
こんな感じでクエリを実行

あとはアクセスしたい時に
echo = $customer['name'];
echo = $customer['tel'];
echo = $customer['fax'];
の様に “as”の後に指定したエイリアスが配列のキーとなる。

ほんとこのDQLがよくできてらっしゃる。


現行のVersionはSymfony2が出てるので、そっちの方が気になる所ですが。
メジャーアップデートの為、バージョンアップ作業が手間だとかなんとか。。。
うちの会社で使い出すのは、まだ先になりそうです。
にしてもJavaとかと違って、PHPは型宣言とかも緩いから楽ですけど、ものすごいセキュリティホールがありそうで怖いわあ。


Microsoft Live Writerが凄いと俺の中で話題に

おはこんばんちは!!ハッピーウィークエーンドです。
GWとかの大型連休明けの一週間は、これでもかっていう位に身体が重いですね。
改めまして、今週もお疲れ様でした。

さて、書き溜めておかないと忘れるというクズっぷりを是正する為に、色々とWordpsess下書き用のアプリを探してた訳です。何より怖い「アレ」対策も兼ねてます。
FC2でブログを運営してた時代に、長文を書いて保存しようとすると謎のhttpエラー。
もうなんなの!と。
ブログを長期で運営された事ある方ならお分かり頂けるのではないかと思いますww

そして見事発掘しました!Microsoft Live Writerです。
正直最初は半信半疑でした。
XPからOEが消え、Liveメールを使わざるを得ない状態の時に物凄い使い難かった事が念頭にあったから。
あの頃、個人ではシェアウェアのBecky!2を使ってましたが、社内ではOEとLiveメールを利用しないといけなかったのです。
故にトラウマ。ところがどっこい!こいつかなりの優れものです!大前提の下書きファイル。
これはローカルに保存される訳ではなく、そのままWordPressの下書きにぶちこまれます。
なので、出先でちょいちょい編集->下書きに上げる->後で下書きをwebで開いてテンプレートとかを確認、微調整->投稿という手順でいけます。
もちろん、最初にドメインを入れて設定をするので、直接記事を上げる事も可能です。

すごいなーと思ったのは画像データ。
いつもみたいにofficeで書類を作る様にアートを傾けたりしつつ、そのままサイトに反映されます。
すげー便利野郎ですね。
WordPressで運営されてる方は、是非一度使ってみては如何でしょうか(‘ω’)
それではこの辺で。

※この記事は会社からの帰り道、iPhoneから80%は書き上げたものです。w