Mac OS X(クライアント版)では標準でCのMySQLライブラリが入っていないため、インストールして、プロジェクト側で設定する必要があります。
- MySQLを本家からDLしてインストールする。
- 「プロジェクトの設定」→「ビルド」タブで、
- 「検索パス」→「ヘッダ検索パス」に「/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(〜);
}
}
- 該当モデル自身を呼び出すときは $this->find(〜)
- アソシエーションしてるモデルは $this->Hoge2->find(〜);
- アソシエーションしてないモデルは ClassRegistry::init("Hoge3")->find(〜);
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");
}
ファイル復元ソフトを使ったら、不可視ファイルのドットが全部取れてもうた。
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'));
とやる必要がありました。
<?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 モジュール導入のメモ。
意外と簡単にできました。
ただCGI等の出力の問題、RSS等にも反映されてしまう問題もあるみたいなのでその辺を調べていこうと思います。
- apxs(httpd-devel)のインストール
- 公式サイト(tangent.org)よりダウンロード → 展開 → make → make install
- Apache再起動
- .htaccess等に下記のように指定します
yum -y install httpd-devel
# 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
# apachectl restart
AddOutputFilter LAYOUT html
LayoutHeader header.html
LayoutFooter footer.html
※レイアウトファイルを更新しても、Apacheを再起動しないと反映されない...かも?
$this->action : アクション名
$this->viewPath : ビューテンプレートを格納しているディレクトリ名
などなど。ほとんど参照できる。
