Posted on 12月 9th, 2007 by sudabon
開発から遠ざかっていたので、久々の投稿になりますが、今回は新たにZend Frameworkを使って開発することになりました。いきなりマニュアルを読むのは退屈なので、まずは、
あるいは、
を読み、後ほどプログラマ向けリファレンスガイドを読むことにしました。
そこで、HTTPリクエストオブジェクトでいきなり躓いたので、メモしておきます。上記の書籍によれば、HTTPリクエストオブジェクトでは、
$_GET / $_POST
は使わず、それぞれ
getQuery() / getPost()
を使うルールことになっているそうなのだが、実際に、
$request = $this->getRequest();
$foo = $request->getQuery(’foo’);
として、
http://www.example.com/index/index/foo/1/bar/1
にアクセスしても、データは取得できませんでした。もちろん、
http://www.example.com/index/index?foo=1&bar=1
にアクセスすれば、データは取得できます。やむを得ず、
$foo = $this->_getParam(’foo’);
$bar = $this->_getParam(’bar’);
としてひとまず無事解決しました。(ちなみに面倒だったので、Postは試していません。今回はGetのみです。ごめんなさい。)そこで、いろいろと実験してみてわかったのは、以下の通りです。
これはNG
$foo = $_GET[’foo’];
これらはOK
$request = $this->getRequest();
$foo = $request->getParam(’foo’);
// あるいは
$foo = $this->_getParam(’foo’);
Filed under: プログラミング, Webフレームワーク | No Comments »
Posted on 7月 2nd, 2007 by sudabon
YouTube with Symfonyと同様、PEARを使わずにAmazon ECS Webサービスをsymfonyで利用する方法をメモしておきます。
<?php
class bookComponents extends sfComponents
{
public function executeDefault()
{
$apikey = "YOUR_API_KEI";
$asocid = "YOUR_ASSOCIATE_ID";
$url = sfConfig::get(’app_book_url’) . "Service=AWSECommerceService&AWSAccessKeyId=" . $apikey . "&AssociateTag=" . $asocid
. "&ResponseGroup=Large&Operation=ItemSearch&SearchIndex=Books&locale=JP&Sort=daterank&Version=2007-05-14&BrowseNode=499986";
[…]
Filed under: Webフレームワーク | No Comments »
Posted on 6月 5th, 2007 by sudabon
当然ながら本番環境では、
“/myproject/apps/myapp/config/settings.yml”
prod:
.settings:
cache on
“/myproject/apps/config/cache.yml”
default:
enabled: on
with_layout: false
lifetime: 86400
としてキャッシュ機能を有効にし、レスポンスの向上を図りたいわけですが、
“/myproject/apps/myapp/modules/mymodule/template/searchSuccess.php”
<?php echo form_tag(’@search’, ‘method=get’) ?>
<?php echo input_tag(’query’, htmlspecialchars($sf_params->get(’query’), ENT_QUOTES), array(’style’ => ‘width: 150px’)) ?> <?php echo submit_tag(’検索’) ?>
</form>
のように、GETメソッドを利用したformを含むtemplateをキャッシュすると、
$sf_params->get(’query’)
で取得したvalueがなぜか表示されません。ちなみに、POSTメソッドを使った場合は問題ありませんでした。
対処療法的ですが、
“/myproject/apps/myapp/modules/mymodule/config/cache.yml
search:
disabled: off
として、formのテンプレートはキャッシュをOffにすれば、正常に動作します。
根本的な解決をするためには、symfonyのコードを読まないと、なんともできないですね。でも、コード量は半端じゃなく膨大ですから、気合いを入れて取りかからないと、時間の無駄になってしまいそう。暇を見つけて、チャレンジしてみたいと思います。
Filed under: Webフレームワーク | No Comments »
Posted on 6月 1st, 2007 by sudabon
SymfonyでGoogleMapを使う方法を紹介します。いろいろ方法はあるのだろうが、一番手っ取り早くて、JavaScriptを書かなくても利用できる方法を紹介します。
具体的には、PHP Google MAP APIクラスライブラリを利用します。
PHP GoogleMapAPIでクラスライブラリが公開されており、これをダウンロードしてSymfonyの/myproject/apps/myapp/lib/におき、該当するモジュールのaction.calss.phpでrequireしてパラメータをセットします。
例えば、下記のような感じです。各行の意味はだいたいわかると思いますが、詳細はクラスライブラリのソース内に記載(英語)がありますので、そちらを参照してください。
“actions.class.php”
require(’GoogleMapAPI.class.php’);
$this->map = new GoogleMapAPI();
$this->map->setHeight(’400px’);
$this->map->setWidth(’400px’);
$this->map->enableMapControls();
$this->map->enableZoomEncompass();
$this->map->enableOverviewControl();
$this->map->enableSidebar();
$this->map->setBrowserAlert(
‘お使いのブラウザでは地図を表示することができません。’
.’Internet Explorer 6.0以降か、’
.’Firefox 1.0以降をおすすめします。’);
$this->map->setJSAlert(’お使いのブラウザではJavascript’
.’に対応していないか、Javascript がオフになっています。’
[…]
Filed under: Webフレームワーク, Webサービス | No Comments »
Posted on 5月 26th, 2007 by sudabon
symfonyで開発したWebアプリケーションをXREAサーバにインストールした時の作業内容をメモしておきます。
symfonyフレームワーク テスト置き場に記載されている手順を参考にしました。
1.pearのインストール
phpディレクトリに作成
$mkdir ~/php
http://pear.php.net/go-pearの内容をコピーして~/go-pear.phpとして保存して実行
1. Installation prefix : /usr/local
2. Binaries directory : $prefix/bin
3. PHP code directory ($php_dir) : $prefix/lib/php
4. Documentation base directory : $php_dir/docs
5. Data base directory […]
Filed under: Webフレームワーク | No Comments »
Posted on 5月 24th, 2007 by sudabon
MySQLにてカラムを連結して文字列検索でMySQLのCONCAT関数を利用し、連結したカラムに対して文字列検索を行う方法を紹介しましたが、これをSymfonyに実装する方法を紹介します。
例えば、下記のように、
SELECT * FROM tablename WHERE colA like ‘%keyword%’
単にカラムAに対してkeywordで文字列検索するのであれば、
$c = new Criteria();
$c->add(TablenamePeer::COLA, ‘%keyword%’, Criteria::LIKE);
$Tablenames = TablenamePeer::doSelect($c);
とすればOKですが、下記のように、
SELECT * FROM tablename WHERE CONCAT(colA, colB) like ‘%keyword%’
CONCATを利用しようと思うと、
$con = sfContext::getInstance()->getDatabaseConnection(’propel’);
$query = "SELECT id FROM " .self::TABLE_NAME. " WHERE CONCAT(colA, colB) like ‘%keyword%’";
$stmt = $con->prepareStatement($query);
$rs = $stmt->executeQuery();
とする必要があります。
パラメータの指定方法の詳細はこちらのTable 8-1 - SQL and Criteria Object Syntaxにありますのでご参照ください。
Filed under: データベース, Webフレームワーク | No Comments »
Posted on 5月 19th, 2007 by sudabon
Symfonyで開発中のアプリケーションにYouTubeの動画をマッシュアップしようと思い、Services_YouTubeを使おうとしたのですが、Strict Standardsを吐きまくり、対処が面倒になったので、PEARを使わないことにしました。そこで、
$url = "http://www.youtube.com/api2_rest?method=youtube.videos.list_by_category_and_tag&dev_id=". $apikey . "&category_id=15&tag=" . $tag;
$res = file_get_contents($url);
$xml = simplexml_load_string($res);
$items = $xml->xpath(’//video’);
として、$itemsから各種データを読み出そうとしましたが、XMLElementオブジェクトとなっているため、配列操作では当然ながら読み出せず、どうやったら読み出せるのだろうか?とネットを検索していると、答えが見つかりました。
そのままずばりarray型にキャストするのです。あまりにストレートだったので、かなり意表をつかれました。
foreach ($items as $item) {
$video = (array)$item;
// 各種データの読み出し
}
Filed under: Webフレームワーク | No Comments »
Posted on 5月 10th, 2007 by sudabon
以前からWebアプリケーションのちょっとしたアイデアがあり、ようやくその開発に着手できるようになりました。今回はsymfonyを使って開発しようとしているのですが、schema.xmlの作成中に早速データベースのカラムの型指定の方法がわかりませんでした。
ということで、早速ドキュメントへのリンク Propel Column Types です。
mysqlのtextは、propelではlongvarcharなのね。へぇ~、知らなかった。
Filed under: Webフレームワーク | No Comments »
Posted on 4月 13th, 2007 by sudabon
project_dir/lib/model/にXXX.phpとXXXPeer.phpの2種類のModel Classが作成され、さらにproject_dir/lib/model/om/にBaseXXX.phpとBaseXXXPeer.phpの2種類のBase Data Model Classが作成されますが、Askeet day 10を読んでいて、それぞれの意味がなんだったのかがわからなくなったので、Symfony BookのModel Layerの章を読み直しました。
要点をまとめておきます。
・project_dir/lib/model/om/以下のBase Data Model Classはschema.xmlを変更し、propel-build-modelコマンドの実行時にすべて再生成されるので、カスタマイズする場合はproject_dir/lib/model/以下のModel Classを変更する必要がある。もしBase Data Model Classが変更された場合でも、extendsによりクラスが継承されるので、schema.xmlの変更はそのまま継承される。
・PeerではないXXX.phpはDBのレコードに相当するObject Classで、レコードのカラムや関連レコードを取得することができる。一方、XXXPeer.phpはPeer Classであり、DBテーブルを操作するためのstaticメソッドを含むクラスで、テーブルからレコードを取得する方法を提供し、オブジェクトあるいはオブジェクトの集合をreturn valueとして返す。
Filed under: Webフレームワーク | No Comments »
Posted on 4月 10th, 2007 by sudabon
PHPフレームワークであるsymfonyの解説書がWebで公開されていることを以前ここで書きましたが、先日これを読み終わったので、今はaskeetというチュートリアルを読んでいます。完成品は既にオープンソースとして公開され、デモも用意されています。
本論からは脱線しますが、このチュートリアルの副題はsymfony Advent Calendarとなっており、Adventとは日本語で「降臨節」と言うそうです。Wikipediaによると、降臨節とは「イエス・キリストの降誕を待ち望む期間の事」とのことで、このチュートリアルが12/1から12/24までの24日間毎日公開されることを指して、Adventと表現しているようです。
なかなかやることが粋だなぁと思いました。
Filed under: Webフレームワーク | No Comments »