Tk のすべての投稿

ACLでアクセス管理「CakePHP2.2」

ACLのデータベーステーブルの初期化

[text]./app/Console/cake schema create DbAcl[/text]

ACOデータの作成

[text]./app/Console/cake acl create aco root controllers[/text]

参考:

 

サクラサーバーにcakephpをインストール

参考サイト
http://www.webopixel.net/cakephp/339.html

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

http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=331&forum=3&post_id=566

[php]
class DATABASE_CONFIG {

public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘mysql〇〇○.db.sakura.ne.jp’,  //データベース サーバ
‘login’ => ‘○○○’, //データベース ユーザ名
‘password’ => ‘○○○’, //接続パスワード
‘database’ => ‘○○○’, //データベース名
‘prefix’ => ”,
‘encoding’ => ‘utf8’,
);

[/php]

CPIサーバーでcakephpを動かす

appがおいてある同じ階層に.htaccess
[text]
<IfModule mod_rewrite.c>
AddHandler x-httpd-php536 .php
suPHP_ConfigPath /usr/home/idaa1dddy/ama003/html/

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
[/text]

php.ini作成して、以下のように記述し、設定を反映させたいディレクトリにファイルを設置する。

コントロールパネルにログイン「お客様情報」タグをクリック。
「プログラムのパスとサーバの情報」→「PHP iniの設定情報」内容を全コピー

[text]mbstring.encoding_translation=off
mbstring.internal_encoding = utf-8[/text]

※ファイル権限を与えることを忘れずに
test

http://raining.bear-life.com/cpi/cpi%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A7post%E3%81%AE%E5%80%A4%E3%81%8C%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%81%99%E3%82%8B%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95

テーブルの結合について

等価結合・・・2つのテーブルのカラムを指定し、一致したカラムのデータのみ抽出する

img_01

外部結合・・・指定したカラムのデータがテーブルのどちらか一方にしかない場合もデータを抽出できる。結合方法は、左外部結合右外部結合完全外部結合がある。

左外部結合・・・左側のテーブルのデータをすべて抽出し、右側のテーブルの一致したデータのみを抽出する。「LEFT JOIN

右外部結合・・・右側のテーブルのデータをすべて抽出し、左側のテーブルの一致したデータのみを抽出する。「RIGHT JOIN

完全外部結合・・・2つのテーブルそれぞれに一致しない結果も抽出結果として表示します。「FULL OUTER JOIN

 

再帰結合・・・同じテーブル同士での結合を行ないます。再帰結合はテーブル名での区別が出来ないため「AS」でテーブルに別名をつけ結合させます。

複数アソシエーションの書き方について

AテーブルとBテーブルが結合されており、BテーブルとCテーブルが結合されている状態で、AテーブルでCテーブルのデータを取りたい場合。

1.通常のアソシエーションを利用

Bテーブルを軸にし、beloggToでAテーブルとCテーブルのデータを取得する

2..joinを扱う

 

参考:http://q.hatena.ne.jp/1279786155

HasAndBelongsToMany

class Recipe extends AppModel {
    public $name = 'Recipe';
    public $hasAndBelongsToMany = array(
        'Ingredient' =>
            array(
                'className'              => 'Ingredient',
                'joinTable'              => 'ingredients_recipes',
                'foreignKey'             => 'recipe_id',
                'associationForeignKey'  => 'ingredient_id',
                'unique'                 => true,
                'conditions'             => '',
                'fields'                 => '',
                'order'                  => '',
                'limit'                  => '',
                'offset'                 => '',
                'finderQuery'            => '',
                'deleteQuery'            => '',
                'insertQuery'            => ''
            )
    );
}

className: 元モデルに関連付けられるモデルのクラス名。Recipe HABTM Ingredient を定義したい場合、’Ingredient’となります。

joinTable: このアソシエーションに使う中間テーブルの名前。テーブル名がHABTMテーブルの規約に従っていない場合に指定します。

with: joinするテーブルのモデル名を定義します。デフォルトではCakePHPはモデルを自動的に生成します。上記のサンプルでは、IngredientsRecipeです。このキーを使うことで、このデフォルトの名前を上書きすることができます。この名前のモデルクラスを生成することで、他の通常のモデルと同じようにたとえば追加の列や情報を取得するようにカスタム動作を定義できます。

foreignKey: アソシエーション先のモデルを検索するための外部キーの名前。これは複数のHABTMを定義するためによく使われます。このキーのデフォルト値はアソシエーション先のモデルの単数形に _id がついたものです。

associationForeignKey: アソシエーション先のもう一方のモデルを検索するための外部キーの名前。これは複数のHABTMを定義するためによく使われます。このキーのデフォルト値はアソシエーション先のモデルの単数形に _id がついたものです。

unique: bool値、または文字列で keepExisting を指定します。
trueを指定すれば(これがデフォルトです)、新しいレコードを挿入する前に既存の関連するレコードを削除します。
falseを指定すれば、saveを実行してレコードを挿入したあとに、joinできないレコードがあれば削除されます。
keepExisting を指定すれば、 true を指定した時と似ていますが、既存の関連レコードは削除されません。

conditions: find()に指定するconditionsと互換性のある配列もしくはSQL文字列を指定します。アソシエーション先のテーブルに条件を指定したければ、’with’ に指定したモデルを使って必要なbelongsToアソシエーションを定義してください。

fields: アソシエーション先のモデルから取得するフィールドのリスト。デフォルトで全フィールドが含まれます。

order: find()に指定するorderと互換性のある配列もしくはSQL文字列を指定します。

limit: アソシエーションモデルのデータの最大行数。

offset: アソシエーションモデルのデータをスキップする行数。

finderQuery, deleteQuery, insertQuery: データ取得、削除、追加の時に使われるSQLクエリを指定します。これは、動作をカスタマイズしたい時に使います。

参考

http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html

CakePHPのHasAndBelongsToManyを使う

http://www.webopixel.net/cakephp/259.html

チェックボックス

チェックボックス制御2つ以上併記したい

http://oshiete.goo.ne.jp/qa/6906994.html

 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”>
<html lang=”ja”>
<head><title>sample</title>
<meta http-equiv=”Content-Script-Type” content=”text/javascript”>

<script type=”text/javascript”>
<!–
function hoge(evt){
//それぞれのグループのチェック許容数最大値
var limit ={ “group1”:1, “group2”:2, “group3″:3 };

var t = evt.target || evt.srcElement;
var cnt=0, p = t.parentNode;
var elm, e, i, max;
if(t.nodeName!=”INPUT” || t.type!=”checkbox” ||
!t.checked || !(max=limit[p.id])) return;

elm = p.getElementsByTagName(“input”);
for(i=0; e=elm[i++];)
if(e.type==”checkbox” && e.checked) cnt++;
if(cnt>max){
t.checked = false;
alert(“チェックは” + max + “個まで”);
}
}
//–>
</script>
</head>
<body>
<form action=”#” onClick=”hoge(event)”>
<fieldset id=”group1″>
<legend>group1</legend>
<input type=”checkbox” value=”0″ name=”a_1″ checked>a_1
<input type=”checkbox” value=”1″ name=”a_2″>a_2
<input type=”checkbox” value=”2″ name=”a_3″>a_3
<input type=”checkbox” value=”3″ name=”a_4″>a_4
</fieldset>

<fieldset id=”group2″>
<legend>group2</legend>
<input type=”checkbox” value=”0″ name=”b_1″ checked>b_1
<input type=”checkbox” value=”1″ name=”b_2″>b_2
<input type=”checkbox” value=”2″ name=”b_3″>b_3
<input type=”checkbox” value=”3″ name=”b_4″>b_4
</fieldset>

<fieldset id=”group3″>
<legend>group3</legend>
<input type=”checkbox” value=”0″ name=”c_1″ checked>c_1
<input type=”checkbox” value=”1″ name=”c_2″>c_2
<input type=”checkbox” value=”2″ name=”c_3″>c_3
<input type=”checkbox” value=”3″ name=”c_4″>c_4
</fieldset>
</form>

</body>
</html>

<その2>

<html>
<head>
<script language=”javascript” type=”text/javascript”>
function autochk(p,name){
var f = p.form;
var el;
for(var prop in f){
if(prop.toString().substr(0,2)==name){//名前がname(‘ko’)で始まるもの
el=f.elements[prop];
if(el.type==”checkbox”){//このチェックは省略してもいいかも
el.disabled = !p.checked;
}
}
}
}
</script>
</head>
<body>
<form id=”query” name=”query”>
<input type=”checkbox” name=”oya” value=”1″ checked checked onclick=”autochk(this,’ko’);”>親
<input type=”checkbox” name=”ko1″ id=”ko1″ value=”1″ checked>子1
<input type=”checkbox” name=”ko2″ id=”ko2″ value=”1″ checked>子2
<input type=”checkbox” name=”ko3″ id=”ko3″ value=”1″ checked>子3
<input type=”checkbox” name=”ko4″ id=”ko4″ value=”1″ checked>子4
<input type=”text” name=”other” value=”その他”>
</form>
</body>
</html>

<その2>

<html>
<head>
<script language=”javascript” type=”text/javascript”>
function autochk(f){
for(var i=0;i<f.form.length;i++){
if (f.form.elements[i].className==”ko”){f.form.elements[i].disabled = !f.checked;}
}
}
</script>
</head>
<body>
<form>
<input type=”checkbox” name=”oya” value=”1″ checked onclick=”autochk(this);”>親
<input type=”checkbox” name=”ko1″ value=”1″ checked>子1
<input type=”checkbox” name=”ko2″ value=”1″ checked>子2
<input type=”checkbox” name=”ko3″ value=”1″ checked>子3
<input type=”checkbox” name=”ko4″ value=”1″ checked>子4
<input type=”checkbox” name=”other” value=”1″ checked>他
</form>
</body>
</html>

 

belongsTo

<?php

class Profile extends AppModel {
    var $name = 'Profile';
    var $belongsTo = array(
        'User' => array(
            'className'    => 'User',
            'foreignKey'    => 'user_id'
        )
    );
}
?>

belongsTo 関連の配列で有効なキーは以下のようになります:

  • className: 現在のモデルに関連したモデルのクラス名。‘Profile belongsTo User’ という関係を定義する場合、className キーは‘User’になります。
  • foreignKey: 現在のモデルにある外部キー名。複数の belongsTo 関係を定義する必要がある場合に、これは特に便利です。このキーのデフォルト値は、他のモデル名のアンダースコアで区切られた単数形で、末尾に‘_id’が付きます。
  • conditions: 関連モデルのレコードを限定するために使用する SQL。SQL にモデル名を使用するのは良い習慣となります: “User.active = 1” は常に“active = 1”よりも推奨されます。
  • fields: 関連モデルのデータを取得した際に取り出すフィールドのリスト。デフォルトではすべてのフィールドを返します。
  • counterCache: (bool) true にセットすると、save() または delete() が呼び出されるたびに、関連モデルは自動的に外部テーブルの“[singular_model_name]_count”というフィールドをインクリメントまたはデクリメントします。カウンタフィールドの値は関連する行の番号を表します。
  • order: 返される関連する行の並び順を定義する SQL。

$hasOne

class User extends AppModel {
    var $name = 'User';
    var $hasOne = array(
        'Profile' => array(
            'className'    => 'Profile',
            'conditions'   => array('Profile.published' => '1'),
            'dependent'    => true
        )
    );

  • className: 現在のモデルに関連したモデルのクラス名。‘User hasOne Profile’ という関係を定義する場合、className キーは‘Profile’ になります。
  • foreignKey: もう一方のモデルにある外部キーの名前。複数の hasOne 関係を定義する必要がある場合に特に便利です。このキーのデフォルト値は、現在のモデル名のアンダースコア区切りの単数形で、末尾に‘_id’をつけたものです。上記の例では、’user_id’ となります。
  • conditions: 関連モデルのレコードを限定するための SQL。SQL 内でモデル名を使用することを習慣にしておくようにしておきましょう:“approved = 1.” よりも、“Profile.approved = 1” の方が良い記述です。
  • fields: 関連モデルのデータが取得された際に取り出すフィールドのリストです。デフォルトではすべてのフィールドを返します。
  • dependent: dependent キーを true にセットし、delete() メソッドの cascade 引数を true をセットして呼び出すと、関連するモデルのレコードも併せて削除されます。この場合、true をセットしているので、User を削除すると、関連する Profile も削除します。

 

お気に入り 役立つ

CakePHP開発者が知るべき10のこと

http://1-byte.jp/2011/03/09/10_things_you_must_know_about_cakephp/

CakePHPブログチュートリアル

http://book.cakephp.org/1.3/ja/view/1528/CakePHP%E3%83%96%E3%83%AD%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB

CakePHP のおいしい食べ方

http://cakephp.seesaa.net/

CakePHP/ビュー

http://yakinikunotare.boo.jp/orebase2/cakephp/view

CakePHP アプリケーションの流れを追う

http://www.slideboom.com/presentations/34211/CakePHP-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%E8%BF%BD%E3%81%86

CakePHP 日本語フォーラム

http://cakephp.jp/modules/newbb/

CakePHP ViewHelperの使い方

http://www.1×1.jp/blog/2006/08/cakephp_viewhelper.html

[ステップアップ! CakePHP] Controller で Component を使う

http://c-brains.jp/blog/wsg/10/05/24-173034.php

CakePHP Viewの基本

http://dwi.blog101.fc2.com/blog-entry-13.html

[mac] Mac OS X LionにEclipseをインストールして日本語化までのメモ

http://www.la-nouveau.mydns.jp/wordpress/?p=1302

xdebug

http://jacoyutorius.wordpress.com/2010/10/09/mac%E3%81%ABphp%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/

CakePHPで入力値を取得・表示するだけのプログラム

http://1bit.mobi/20110213191557.html

意味

ACL【Access Control List】(アクセス制御リスト)アクセス権をコントロールする仕組み

 

ARO [アクセスリクエストオブジェクト]  ・物を扱う「主体」(たとえばユーザ)  ・AROは「(ログイン出来る)ユーザー」http://d.hatena.ne.jp/roitan/20090102

 

ACO [ アクセスコントロールオブジェクト]   ・ 対象物(ページやアクション)

 

ARO_ACO – アクセス権の対応表

 

http://hijiriworld.com/web/cakephp-acl-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E6%94%BB%E7%95%A5%E3%81%99%E3%82%8B/

 

Ajax(エイジャックス、アジャックス、アヤックス)は、ウェブブラウザ内で非同期通信とインターフェイスの構築などを行う技術の総称。http://ja.wikipedia.org/wiki/Ajax

 

ハッシュ関数 (ハッシュかんすう、hash function) とは、あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数のこと。http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

 

foreach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。http://ja.wikipedia.org/wiki/Foreach%E6%96%87

 

バッファ【buffer】複数の機器やソフトウェアの間でデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく記憶装置や記憶領域のこと。http://e-words.jp/w/E38390E38383E38395E382A1.html

 

XML(エックスエムエル)Extensible Markup Language(エクステンシブル マークアップ ランゲージ)は、個別の目的に応じたマークアップ言語作成のため、汎用的に使うことができる仕様、および仕様により策定される言語の名称である。一般的にXML(エックスエムエル)と略称で呼ばれる。http://ja.wikipedia.org/wiki/Extensible_Markup_Language

 

シリアライズ 配列などの構造を持つデータを、ひとつのフィールドに保存することができます。

 

スキーマ(schema)データベースの構造であり、データベース管理システム (DBMS) でサポートされている形式言語で記述される。関係データベースでは、スキーマは関係 (表) と関係内の属性 (フィールド) 、属性や関係の関連の定義である。

 

i18n あいえいてぃーんえぬ (コンピュータ) ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。http://d.hatena.ne.jp/keyword/i18n

モデル

モデルの記述

//——————————————————————————–

// 初期データ取得

//——————————————————————————–

function getIni() {

$data = array();

return $data;

}