‘cakephp1.2; タグのついている投稿’
CakePHP SslRequirement の罠
Written by aoki on 2010 年 1 月 24 日 – 10:38 AM -CakePHPのコンポーネントに SslRequirement がある。
SSLアクセスをコントロールするには便利なコンポーネントだ。
だが、しばしばエラーを見えにくくする場合がある。
Ajax で呼ぶときは、必ず対象のアクションを
としてコントローラの冒頭で指定しておく必要があります。
そうしないと以下のようなエラーにぶつかります。
「Error: Http:Controller could not be found.」
。。。これを見つけるのに半日、、、疲れるな~。
Tags: cakephp1.2
PHPカテゴリー | コメントはまだありません »
SoftDeletable Behavior 注意点・改造点
Written by aoki on 2009 年 12 月 13 日 – 11:37 PM -とても便利なBehavior だが、PostgreSQL環境での注意点
deleted のデータ型は bool ではなく int型 にして defalut=0 としておく。
また、SoftDeletable Behavior 279行目は以下の通りに修正した。
-
//$queryData['conditions'][$Model->alias . '.' . $this->__settings[$Model->alias]['field']] = '!= 1';
-
$queryData['conditions'][$Model->alias . '.' . $this->__settings[$Model->alias]['field']] = '0';
元のままだと、配列で設定する方法となり、finadAll では Model.deleted= '!= 1' となってしまう。
変更後は Model.deleted= 0 で挙動します。
Tags: cakephp1.2
PHPカテゴリー | コメントはまだありません »
モデルのフィールド情報ファイルを作成
Written by aoki on 2009 年 12 月 12 日 – 9:50 PM -モデルのフィールド情報ファイルを作成する。(PostgreSQLのみ対応。)
コマンド ( 使う前に cake に path を通しておく)
cake -app /var/www/html/cake_1.2.5/app/ make_table_info
出力先 table_infos ディレクトリを作成 書き込み権限を付与
/var/www/html/cake_1.2.5/app/tmp/table_infos/
モデル名.txt で出力される。
-
class MakeTableInfoShell extends Shell
-
{
-
var $controller = true;
-
-
function main()
-
{
-
foreach ($this->uses as $model) {
-
-
//$model = $this->modelClass;
-
attr.attname as column_name
-
,attr.attnotnull as not_null
-
,des2.description as column_comment
-
from
-
pg_catalog.pg_class a inner join pg_catalog.pg_namespace ns on a.relnamespace = ns.oid
-
left join pg_catalog.pg_description des on a.oid = des.objoid
-
and des.objsubid = 0
-
inner join pg_catalog.pg_attribute attr on a.oid = attr.attrelid
-
and attr.attnum> 0
-
left join pg_catalog.pg_description des2 on a.oid = des2.objoid
-
and attr.attnum = des2.objsubid
-
where
-
a.relkind IN ('r', 'v')
-
and ns.nspname IN ('public')
-
and a.relname='%s'
-
order by
-
ns.oid
-
,a.oid
-
,attr.attnum"
-
,$this->$model->useTable
-
);
-
-
$result = $this->$model->query( $sql );
-
-
-
');
-
');
-
$i=0;
-
foreach ($result as $value) {
-
-
if ($i) {
-
');
-
}
-
');
-
');
-
}
-
');
-
');
-
');
-
if ($value[0]["not_null"]) {
-
');
-
} else {
-
');
-
}
-
");
-
-
$i++;
-
}
-
-
fwrite($fp, '$this->table_info_idxs = $this->_set_help_table_info_idxs( $model, $filed , $s_filed , $label, @$link , @$show_index ,@$width);
-
');
-
-
');
-
-
}
-
}
-
-
-
function convert_encoding(&$item, $key){
-
-
-
} else {
-
}
-
}
-
-
}
Tags: cakephp1.2
PHPカテゴリー | コメントはまだありません »
App::import() 読み込みエラー
Written by aoki on 2009 年 6 月 10 日 – 10:11 AM -CakePHP1.2 App::import() にて読み込みエラーが発生。
※原因は第二引数はユニークな名前でなければならない。
App::import( 'Vendor', 'fpdf', array('file'=>'fpdf/confirmation.php'));
App::import( 'Vendor', 'fpdf', array('file'=>'fpdf/invoice.php'));
とすると最初に読みこんだものしかインポートできない。
App::import( 'Vendor', 'fpdf_confirmation', array('file'=>'fpdf/confirmation.php'));
App::import( 'Vendor', 'fpdf_invoice', array('file'=>'fpdf/invoice.php'));
とすれば OK です。
気が付けば当たり前なのですが、違う関数で指定しいると名前がダブっても気が付けなかったのでした。
Tags: cakephp1.2
PHPカテゴリー | コメントはまだありません »
第4回CakePHP勉強会@Tokyo
Written by aoki on 2009 年 5 月 23 日 – 9:07 AM -
久しぶりに「CakePHP勉強会」に参加しました。
特に印象に残ったのは、ビヘイビアの紹介と使い方です。
裏方に徹したものですが、使いこなすと、かなりクールになりそうだ。
Soft Deletable Behaviorは直ぐにでも導入していようと思います。
プラグイン三段活用は大爆笑のLTでしたが、かなり重要な所をついていました。
整理整頓、作業しながらライブラリが出来ていく。。。これって理想なんですよね。
miauさんのプレゼンツール“動く”マインドマップFrieve Editorは、とても面白かったです。
phpUnderControl も勉強してみたいと思います。
やはり、色々な話を聞くと刺激を受けます。
発表者の皆様、準備をしていただいた方々、本当にありがとうございました。
おまんじゅうも驚きました。
Tags: cakephp1.2
IT一般, PHP, セミナーなどカテゴリー | コメントはまだありません »
CakePHP1.2 joinTableの命名長さ制限
Written by aoki on 2009 年 3 月 17 日 – 10:21 PM -CakePHP1.2になり、関連テーブル(HABTMなど)の保存が簡単になった。
$this->data にしっかりとデータセットすれば
$this->Model->save(); とすれば、
すべての関連データを関係するテーブルに自動的に保存してくれます。
ところが、、、、うまく行かない。。。のです。
原因は、joinTableの識別子名が長くなりすぎたことでした。
使用しているデータベースは PostgrSQL8.1ですが、
識別子の長さが63ビットまでとなっていました。
元のテーブル(HABTM)
tbl0010members
tbl0020business_categories
命名規則に沿ったjoinTableは
tbl0010members_tbl0020business_categories
この時点では文字数制限に触れてなさそうなのですが、
CakePHP1.2で自動生成されるSelect文を良く見ると、
以下の様なエイリアス名を自動生成していました。
-
"Tbl0010membersTbl0020businessCategory"."tbl0020business_category_id" AS
-
"Tbl0010membersTbl0020businessCategory__tbl0020business_category_id"
エイリアス名は66文字になっており、
このSQL文を走らせるとエラーになります。
PostgreSQLの設定値 NAMEDATALEN を変更し、
コンパイルしなおせばこの制限値を変更できるのですが、
yumでインストール管理しているので避けたい。
ということで、joinTableそのものは、命名規則に沿わせておいて、
更新可能な view を用意して、代理させました。
(ちなみに1.1では命名規則どおりで動くきます。)
更新可能なviewの名前を
members_business_categories
とすると、追加のSQL文は以下の通り。
-
DROP VIEW members_business_categories;
-
-
CREATE VIEW
-
members_business_categories
-
AS
-
SELECT * FROM tbl0010members_tbl0020business_categories;
-
-
CREATE RULE members_business_categories_ins
-
AS ON INSERT TO members_business_categories
-
DO INSTEAD
-
INSERT INTO tbl0010members_tbl0020business_categories
-
VALUES ( new.tbl0010member_id,new.tbl0020business_category_id);
-
-
CREATE RULE members_business_categories_del
-
AS ON DELETE TO members_business_categories
-
DO INSTEAD
-
DELETE FROM tbl0010members_tbl0020business_categories
-
WHERE tbl0010member_id=old.tbl0010member_id AND
-
tbl0020business_category_id=old.tbl0020business_category_id;
モデルのアソシエーション定義で、
上記のviewをjoinTableとwithに設定
-
'Tbl0020businessCategory'=>array(
-
'joinTable'=>'members_business_categories',
-
"with"=>"MembersBusinessCategory"),
-
);
これで、かなりの文字数を稼げました。
テーブル番号を振るローカル命名規則が仇になった。。。
というこでしょうね(ーー;)
Tags: cakephp1.2
IT一般, PHPカテゴリー | コメントはまだありません »
