アーカイブ

‘cakePHP’ タグのついている投稿

cakePHP1.3再入門#4 Ktaiライブラリと振分け

2010 年 6 月 2 日 Jiro コメントはありません

pearのNet_UserAgent_Mobileを使用して、携帯とPCのアクセスを振り分ける目論見でしたが、携帯用のページ作成には振り分けだけでなくいろいろな機能が必要だと勉強すればするほど理解しました。(某辞任表明首相風)
そういうわけでcakePHPにも利用しやすいKtaiライブラリの導入を決めました。

ECWorks Blogからダウンロードできます。

インストールと言うか、ダウンロードしたファイルを解凍してcakePHPの対象フォルダにコピーするだけです。
テンプのreadmeをよく読めば設置は難しくないですね。

ただ、今回は携帯からのアクセスとPCからのアクセスで異なるViewを表示したいことと、アドレスを分けたくなかったので
ちょっと工夫が必要でした。

/app/controllersにコピーしたAppControllerの中に必要な設定をコピーします。

ここで、コントローラ内にbeforeRender()を追加します。

    function beforeRender() {
    parent::beforeRender();

    if (
        in_array('Ktai', $this->components) &&
        $this->Ktai->is_ktai()
        ) {
            // Viewのパスへの書き換え
            $view_paths = App::path('views');
            $result = array_search(ROOT.DS.APP_DIR.DS.'views'.DS, $view_paths);
            if ($result !== false) {
                $view_paths[$result] = ROOT.DS.APP_DIR.DS.'views_mobile'.DS;
            }
            App::build(array('views' => $view_paths), true);
        }
    }

同じクラス内で

    var $components = array('Ktai');

としているのでif文のコンポーネンツ判断はいらないですね。
参考にしたサイトの記述ではここのif文がarray_key_existsになってて動かなかったのですが
$componentsは[0]->”Ktai”のようになっていてKeyサーチではtrueになりませんでした。

ここでちょっとはまりました。in_arrayならうまく動作しました。

この記述でPCからなら/app/views/以下のレイアウトとテンプレートを携帯からなら
/app/views_mobile/を見に行ってくれます。

/app以下のAppControllerを変更しただけなので、トップページの場合はこのAppControllerを継承した
PagesControllerを/app/controllers/に作成します。

あとは/app/views_mobileとそれ以下の必要なフォルダを作成してdefault.ctp home.ctpなどを携帯専用として作成すればOKです。

とりあえずiMode HTMLシュミレータではうまく動作しました。

カテゴリー: cakePHP タグ: ,

cakePHP1.3再入門#3 ドキュメントルートとトップページ

2010 年 6 月 1 日 Jiro コメントはありません

さてさて、トップページを表示させることは出来たのですが、基本的にトップページが他のページと少し違うレイアウトだったり、ただのインデックスページってこともありますから静的なページを表示することもありえます。

MVCでデータベースに紐づいたページに必ずなるとは限りませんよね。一部新しいお知らせとかが入るくらいで。
今回構築しているシステムでは、トップページはPC用はシステムの案内としようか、それとも直接サービスが使えるようにするか迷ってます。そんな感じなので、まずルーティングについて再確認しておこうと思います。

最初の読込み

http://localhost/ktai/というurlでアクセスしたら、/index.phpをまず読み込みますが、ここに他のソースが読込まれます。

	require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';

appディレクトリのwebrootディレクトリですから、/app/webroot/index.phpを読み込みます。
このなかで/cake/bootstrap.phpをインクルードしている。

エントリポイントについてはここの説明がよくわかる。

このbootstrap.phpからConfigure クラスをインスタンス化している。このときに/app/config/core.phpと/app/config/bootstrap.phpが呼ばれている。
ああ、おんなじ名前が多くて混乱する。
そのあと/cake/dispacher.phpを読んでいる。ここでbaseurlなどを決めているようだ。
これに/app/config/route.phpが絡んでいる。

	Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

pagesコントローラのディスプレイactionでhomeを呼べとなっている。
やっと、ここまで来た。

これはデフォルトでは/cake/libs/controller/pages_controller.phpのなかのdisplayメソッドが使われる。
このように固定されていると中々不自由です。

/app/config/route.phpを書き換えてcontrollerやaction などを書き換える方法もあります。
また呼ばれるテンプレートのhome.ctpの中でレイアウト変更も出来ますね。

home.ctp

<?php
    $this->layout = "main";
    $this->pageTitle = "携帯用タイトル";
?>

/app/views/layoutsにmain.ctpを作っておけばOKです。home.ctpでレイアウトだけ指定して何も書かなければmain.ctpの静的なページになりますね。

認証などでbeforeFilterを加えたりする場合は、/cake/libsにあるpages_controller.phpを
/app/controller/にコピーして書き換えると自由に出来ます。

カテゴリー: cakePHP タグ: ,

cakePHP1.3再入門#2 pear

2010 年 6 月 1 日 Jiro コメントはありません

前回までで、とりあえずトップページが表示されました。
このあとMVCにしたがってデータベースとその表示、更新などのページを作っていくわけですが、今回はちょっと横道にそれてPHPの便利な道具としてpearを導入することにしました。

恥ずかしい話ですが実はpearって何。それっておいしいの?状態でした。

携帯用のwebを作成するためにアクセスしてきた対象が携帯かPCかを振り分ける方法を探していてnet_userAgent_mobileというライブラリを見つけまして、どうもこれがpearというもののひとつであると言うことがわかりました。

pearはPHPの機能を拡張するライブラリということまでわかりました。ww

さて、ローカルのテスト環境にはXAMPPを導入した際にpearは入っているようです。
その環境でNet_userAgent_mobileのインストールに取り掛かります。
pearと言うコマンドでインストールできると言うことまでわかったのでコマンドプロンプトを開いて

C:\xampp/phpに移動します。(xamppのインストール方法によって変わります。)
このディレクトリにpearコマンドがありますので
pear install net_useragent_mobile
とタイプすればダウンロードとインストールを勝手にやってくれます。

これでテストできそうなので以下のようなテストphpを書いてみました。
mobiletest.php

<?php
require_once('Net/UserAgent/Mobile.php'); 

$agent = Net_UserAgent_Mobile::singleton(); 

if($agent->isDoCoMo()){
    echo "docomo" . "<br>";
    echo $agent->getModel()."<br>";
    echo $agent->getSerialNumber()."<br>";
}elseif($agent->isSoftbank()){
  echo "Softbank";
}elseif($agent->isEZweb()){
  echo "au";
}elseif($agent->isWillcom()){
  echo "WILLCOM";
}else{
  echo "PC";
}
?>

この状態でxamppのapacheを起動させてブラウザからhttp://localhost/mobiletest.phpを呼び出すと
「PC」と表示されました。無事動いているようです。次にiモード HTMLシュミレータ2を起動して同様のURLにアクセスすると
iモード HTML シュミレータ

このように表示されました。ユーザーエージェントなどの判別もうまくいっているようです。
ただシリアル番号は取れていないようですが、この部分は後で要検討です。

auやsoftbankもシュミレータでテストするべきですが、とりあえず実機でテストしてみたいのでレンタルサーバーにuploadする方法を検討します。

今回はお名前ドットコムのSD共用サーバーを借りています。
説明を見るとpearはインストールされていないようなので手動でセットしないといけません。

いろいろ調べてみるとpear.phpとNet_UserAgent_Mobileの必要なファイルだけアップロードしても出来るようですが他の機能も必要になりそうなのですべてあげておくことにします。

ブラウザからインストールする方法としてgo-pear.phpと言うソースをアップロードしてインストールする方法がありましたので
テストしてみましたがどうもうまくいきません?

SD共用サーバーはSSHやTelnetが使えないのでFTPに頼るわけですが、アップロード先がドメインを複数含むので以下のようになっています。
analyze
backup
files
hoge.com
hogehoge.com
ブラウザからアクセスできるのはhoge.comとhogehoge.com以下ですのでpearはfiles以下のブラウザでアクセスできない領域におくことにします。
hoge.comの直下にgo-pear.phpをアップロードしてブラウザでhttp://hoge.com/go-pear.phpを叩くとインストール画面が出てきます。
(go-pear.phpはぐぐるとソースが入手できます。)
ここでInstallation prefixのところに何を入れるかで悩みました。
/home/アカウント名/pearなどと解説してるところもあるのですが、SD共用サーバーではどうすればよいか。

仕方ないのでpearをインストールする前に先ほどのmobiletest.phpをアップしてエラー吐かせて見ました。
すると
/export/sdxx/www/jp/r/e/gmoserver/n/m/サーバーアカウントID/hoge.com/mobiletest.php
にエラーがあるとでました。(一部伏字にしてますので、ご自分の環境で確認してください)
これで参照位置がわかりました。ただしgo-pearでインストールする際には/files/hoge/以下にしようと思うのでパーミッションを777にしておかないといけないようです。

面倒になってきたのでWindows環境でインストールしているディレクトリを/files/hoge/PEARにすべてアップロードしました。
さて、pearへのパスが通っていないので、このままでは先ほどのmobiletest.phpは動きません。
include_pathと言う奴を指定しなくちゃいけません。
.htaccessでパスを通す方法が書いてあったので設置して
php_value include_path “.:/export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR”
としてみましたが、動きません。.htaccessでは動かないこともあるとのこと。サーバー側の仕様でしょうね。

仕方ないのでmobiletest.phpに一行加えました。

    ini_set('include_path', ".://export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR");

これをrequire_onceの前に加えたら、なんとか無事動作しました。

結構面倒でしたが、これでpear持つ変えるようになりました。

つぎは振り分けを行うためにcakePHPのルーティングについて、勉強しなおします。
これも結構ややこしやーーーー。

カテゴリー: cakePHP タグ: , ,

cakePHP1.3再入門#1

2010 年 5 月 31 日 Jiro コメントはありません

しばらくcakePHPから遠ざかっていたらVar1.3安定版が出ていました。

新規に1.3をインストールして、再度初心に帰って再入門します。ということで、いつもの覚書と言うかメモです。

ダウンロード
cakePHP日本語サイトのトップに1.3.0 stableのDOWNLOADがあります。
cakephp-cakephp1x-1.3.0-0-g1c06478.zipと言うファイルを落としてきて解凍チン!!。

テスト環境はxamppを使っているのでxampp/htdocs/以下に今回テスト用のktaiというディレクトリを作って中身をコピー。

とりあえず、このままfirefoxでhttp://localhost/ktai/を打ち込む。
まずエラーページが表示される。
cakePHP初期画面

まずは、お決まりのエラーですが、ちょっと新しいのが出ているのかな。
‘Security.cipherSeed’って無かったような気がする。

背景が黄色の部分がエラーです。
3箇所出ています。
最初の二つについては/app/config/core.phpを編集しないといけません。

「Security.salt」の定数がデフォルトだとみんなに知られていますから変更しろとのこと。

198行目の

Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

を書き換えます。
DYhG93b0q…の部分を適当に書き換えます。この値はハッシュの作成に使われます。

CookBookの1.3を見ると CIPHER_SEEDがSecurity.cipherSeedに書き換えられたみたい。なんのことやらw
どうも乱数発生時の種みたいですね。これも適当な数字に書き換えましょう。

203行目の

Configure::write('Security.cipherSeed', '76859309657453542496749683645');

これでさっきの画面をリロードしたら、上の二つはグリーンになります。

3番目のメッセージはデータベースに関する設定をしろってことで、config/database.php.default を config/database.phpにリネームして中身をいじくることになります。

class DATABASE_CONFIG {

	var $default = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'database_name',
		'prefix' => '',
	);

	var $test = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'test_database_name',
		'prefix' => '',
	);
}

$defaultが普通の設定 $testはテストの時なんかに別のDB使うときの設定って認識でいいと思います。
複数のDBなんか同時に使うことはないと思うけど。

ちなみにモデルの定義の中で

$this->useDbConfig = 'test';

とすると$testの定義を使ってくれるので、色々作っておいてモデルごとに使い分けることも出来るみたい。
Bakeとかでも自動判別するんだろうなあ。

[設定]
driverはMySQLなのでそのまま、persistentは持続的データベース接続ってことらしい。
ここに説明が書いてるけど、よく理解して使わないとちょっと怖そう。デフォルトどおりfalseにしておく。
hostはlocalhostのまま、本番動作時はレンタルサーバーとかの指定によって書き換えよう。
loginはMySQLのログインユーザー名、passwordはそのパスワード、databaseは使用するデータベース名。
prefixは接頭語だけど、いらないので省略。

こんな感じでdatabase.phpを書き換えたらOKかな。

設定とりあえずOK

とりあえず初期設定の一部が済みました。使用するデータベースはphpMyAdminとかで先に作成しておいたほうがいいですね。

カテゴリー: cakePHP タグ: , ,

WindowsMobileなどなど

2010 年 5 月 13 日 Jiro コメントはありません

非常に長いことご無沙汰でした。4月に超短納期の仕事が入りまして、ばたばたしておりました。
それが片付いた後は、たちの悪い風邪にかかってしまい。GW明け近くまで臥せっていました。

今回のお仕事はWindowsCE上でEmbeddedVB3.0で作られたシステムをWindowsMobile6.0 VB2005に移行するものでした。仕様書はほとんどなし。データベースもサンプルにデータが入っていない。
データ構成の資料も無い。という状況で、すべては実機の動作とソースから作成する状況でした。しかも1ヶ月に満たない納期でw。

VB2008ならもう少し融通が利くようでしたが、2005のMobile環境はコントロールが異常に少ないことと、プロパティがほとんどの無いに等しいので一苦労でした。昔のEmbeddedの方がプロパティ多いんですよ。びっくりしました。
なんせClickイベントも拾えないのでGotFocusで擬似動作させたり、Activateイベントが思わぬところで動作してぐちゃぐちゃになったりと祭り状態でした。データベースも以前はCDBというモバイル用Accessでしたが今回はSQL-Serverのコンパクト版ですのでデータ型も再定義の必要がありました。

まあ救いといえばロジック部分はある程度流用できたのですが、随分たくさんの変数が使いまわされていることと、オブジェクトの破棄があまり明確で無い書き方をしていたので、その辺はリークのないように気を使いました。

.NET以降のVBはあまり使ったこと無かったのですが、まあ慣れればVSのIDEと共に、ある程度は使い安いかなと感じました。CakePHPもAptanaとFireFoxのデバッグ機能で随分楽にはなりますが、さすがにVSの便利さには追いつかないですね。

その前はVS2008でWPFを使ってC#で書くお仕事でしたが、こっちは新機能満載でググっても情報無くて苦労しました。

という具合にCakePHPは放置状態ですが新バージョンの安定版が出ているので試してみたいところです。
しかしAndoroidやってみたいのでEclipse+SDKをインストールしてJava勉強中です。
片手間で昔作りかけていた見積書システムをVB2008でいじくって遊んでます。せっかくVBやったので忘れないうちにすこし身につけておこうかなと。簡単なシステムですがある程度出来たらVectorあたりで配布しようかな。

まあ、今時あまりはやらないかもしれませんが、iPhoneとかモバイル端末とかいじってて感じたUIへの思いを少し入れてみようかなと。

カテゴリー: ブログ タグ: , , ,
Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Bad Behavior has blocked 18 access attempts in the last 7 days.