Mac OS X(クライアント版)では標準でCのMySQLライブラリが入っていないため、インストールして、プロジェクト側で設定する必要があります。

  1. MySQLを本家からDLしてインストールする。
  2. 「プロジェクトの設定」→「ビルド」タブで、
  • 「検索パス」→「ヘッダ検索パス」に「/usr/local/mysql/include」を追加。「再帰的」にチェック。
  • 「検索パス」→「ライブラリ検索パス」に「/usr/local/mysql/lib」を追加。「再帰的」にチェック。
  • 「リンク」→「他のリンカフラグ」に「-lmysqlclient」「-lm」「-lz」を追加。

CakePHPのモデル内で、独自のバリデーションメソッドを追加する場合に、自分自身や他のモデルを呼びたいときの書き方。

class Hoge extends AppModel {

	var $validate =	array(
				'moreValidation' => array(                
				'rule' => 'moreValidation',              
				);
	var $belongsTo = array(
			'Hoge2' => array(〜);
			);
	function moreValidation() {
		$this->find(〜);
		$this->Hoge2->find(〜);
		ClassRegistry::init("Hoge3")->find(〜);
	}
}

  1. 該当モデル自身を呼び出すときは $this->find(〜) 
  2. アソシエーションしてるモデルは $this->Hoge2->find(〜); 
  3. アソシエーションしてないモデルは ClassRegistry::init("Hoge3")->find(〜); 
で呼び出せそうです。正しいやり方かどうかは知らんけどこれで動く。 オイラは、自身を $this->Hoge->find(〜) としてて動かず、そのあと3の ClassRegistryを使ってもうまくいかず、しばらくハマりました。←アホ
Routerは便利だが、マニュアルの記述だけだと組み込みのhelperとかの対応が出来ない。。。

と思って探したら参考ページ見つけた。これで解決ゾロ!


PHPでファイルダウンロードさせるコードで悪戦苦闘。 OS9、OSX、Winでとりあえず日本語ファイル名文字化けしない感じなのをようやくでけた。。。 

$ua = $_SERVER['HTTP_USER_AGENT'];

//ファイル名にスペースが入っていると気まずいのでアンダーバーで補完
$realname = str_replace(' ', '_', $realname);

if ( (strstr($ua, 'MSIE') && !strstr($ua, 'Win') ) ) { // Mac IEなら
	
	$realname = mb_convert_encoding($realname,  "SJIS", "UTF-8");
	header('Content-Disposition: inline; filename="'. $realname .'"');
	header("Content-Length: ".$content_length);
	header("Content-Type: application/octet-stream");

} else {	//MAC IE 以外

	header("Content-Disposition: attachment"); 
	header("Content-Length: ".$content_length);
	header("Content-Type: application/octet-stream");
}
ファイル復元ソフトを使ったら、不可視ファイルのドットが全部取れてもうた。

find . -type d -name svn | awk '{print "mv",$0,$0"/../.svn"}' | sh
iPhone用の画面を作成しようとしたのだが、1.2では1.1のWebServicesが使えなくなったようなので、routerのprefixで頑張れとのことらしい。

http://phptips.seesaa.net/article/102607319.html

とりあえず

Router::connect('/i/:controller/:action', array('prefix' => 'iphone'));

としたが、$html->link() がすべて /i/ 経由に変換されてまった。

Router::connect('/:controller/:action');

で直った。

ただ、1.1のWebServicesは「1つのControllerで違うViewを使う」だったのだが、これだとControllerもiPhone用のものを作らないといけない。解決方法探したが見つからず。

とりあえずエイリアスっぽく

function iphone_index($options) {
return $this->index($options);
}

とするしかないのかなぁ。

追記 : 

これだと action以下にパラメータがつくときは認識されないので、

Router::connect('/i/:controller/:action/*', array('prefix' => 'iphone'));

とやる必要がありました。


validates

| | コメント(0) | トラックバック(0)
<?php

var $validate = array(
        
'account' => array(
            
'文字数制限' => array(
                
'rule' => array('custom', '/[a-z0-9]{4,16}$/i'),
                
'message' => '半角英数4文字以上16文字以内でお願いします'),
            
'空入力禁止' => array(
                
'rule' => 'notEmpty',
                
'message' => 'なんか挿れてください')
            )
        );
?>
CentOS 5 に mod_layout モジュール導入のメモ。

  1. apxs(httpd-devel)のインストール
  2. yum -y install httpd-devel

  3. 公式サイト(tangent.org)よりダウンロード → 展開 → make → make install
  4. # cd /usr/local/src
    # wget http://download.tangent.org/mod_layout-5.1.tar.gz
    # tar xvzf ./mod_layout-5.1.tar.gz
    # cd ./mod_layout-5.1
    # make
    # make install

  5. Apache再起動
  6. # apachectl restart

  7. .htaccess等に下記のように指定します
  8. AddOutputFilter LAYOUT html
    LayoutHeader header.html
    LayoutFooter footer.html

意外と簡単にできました。 ただCGI等の出力の問題、RSS等にも反映されてしまう問題もあるみたいなのでその辺を調べていこうと思います。

※レイアウトファイルを更新しても、Apacheを再起動しないと反映されない...かも?
$this->action : アクション名
$this->viewPath : ビューテンプレートを格納しているディレクトリ名

などなど。ほとんど参照できる。