無料ブログ作成サービス JUGEM
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | - | - | pookmark |
Composerを使ってCakePHPをインストール(mac)
Composerを使ってCakePHPをインストール(mac)

CakePHPをインストールするフォルダ作成
mkdir ~/cake_sample

そのフォルダへ移動
cd ~/cake_sample

Composerのインストール
curl -sS https://getcomposer.org/installer | php

composer.pharが作成される。

composer.jsonのファイルを作成。
内容はCakePHPのページに掲載されている感じ。
下のはphpunitとdebugkitのインストールも一緒にするように設定してみた。
{
 "name": "example-app",
  "repositories": [
   {
    "type": "pear",
    "url": "http://pear.cakephp.org"
   }
  ],
  "require": {
   "pear-cakephp/cakephp": ">=2.4.0",
   "cakephp/debug_kit": "2.2.*"
  },
  "config": {
   "vendor-dir": "Vendor/"
  },
  "require-dev": {
   "phpunit/phpunit": "3.7.*"
  }
}


php composer.phar install --dev

とすると、ファイルの中身が以下の通り。
composer.phar
composer.json
Vendor/
 bin/
 autoload.php
 composer/
 pear-pear.cakephp.org/

ここから、bakeコマンド使用。
Vendor/bin/cake bake project ~/cake_sample

これでcake_sampleフォルダ内にプロジェクトが作成される。

最後にConfig/bootstrap.phpを編集
// composerのautoloadを読み込み
require APP . '/Vendor/autoload.php';

// CakePHPのオートローダーをいったん削除し、composerより先に評価されるように先頭に追加する
// https://github.com/composer/composer/commit/c80cb76b9b5082ecc3e5b53b1050f76bb27b127b を参照
spl_autoload_unregister(array('App', 'load'));
spl_autoload_register(array('App', 'load'), true, true);

CakePlugin::loadAll();


これでVendor/autoload.phpを読み込んでPlugin(DeugKit)の使用が可能になる。


別のフォルダにCakePHPをインストールしようとしたがうまく行かなかった。多分何か設定が間違っていたのだろうけれど。。。?
~/cake ーーcomposer.phar composer.json Vendorフォルダ以下
~/cake_sample ーーCakePHPアプリケーションフォルダ
composerのautoloadがうまく行かない・・・。

参考にしたサイト
CakePHP 応用インストール
Composerを使ってCakePHP2で使うPHPUnitを準備する
【メモ】CakePHP2でComposerを使ってPHPUnitをいれる
Composerを使ってCakePHP2.4.1とDebugKitをインストールするまで


PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)


JUGEMテーマ:インターネット
| tako | cakephp | comments(0) | trackbacks(0) | pookmark |
hasAndBelongsToMany その2
前回の書き方で結果が出なかったので。

HappyQuality:[CakePHP]paginateでbindModel
問題

paginateでbindModelしてもうまくいきません (><)

回答

paginateでbindModelを使うときはbindModelの引数にfalseを渡しましょう

$this->Model->bindModel($bind, false);
$this->paginate = array(
"Model" => array(
"conditions" => $conditions,
"limit" => 30,
"order" => array("Model.created" => "ASC"),
),
);
$lists = $this->paginate("Model");
解説

bindModelの第2引数はクエリを投げた後にbindをリセットするかどうかのフラグで、デフォルトはtrueになっています。
paginateでデータを取得する場合、最初にデータ数をカウントするクエリを投げるので*1 カウントではbindされているのですが、2度目のデータ取得ではbindが外れてしまうことが原因でした。
bindModelの第2引数にfalseを渡すと、その処理においてはbindの設定が持続しますのでカウントした後のデータ取得でもちゃんとアソシエーションが維持されると言うわけです。

データ数/limitでページ数を算出したりするためでしょう。 [↩]


なるほど。bindModelを使えばいいのか。
bindModelの使い方はCakePHPのbindModelとunbindModelでも解説。

Model AとBがhasAndBelongsToMany関係にある状態であり、且つModel AがHasOneの関係にあるModel Cの値を取得しているAの値を取得する感じ?

CakePHP 1.3 Book:3.7.6.5 hasAndBelongsToMany (HABTM)
$this->Recipe->bindModel(array('hasOne' => array('RecipesTag')));
$this->Recipe->find('all', array(
'fields' => array('Recipe.*'),
'conditions'=>array('RecipesTag.tag_id'=>124) // id of Dessert
));


↑を参考に。



JUGEMテーマ:インターネット


| tako | cakephp | comments(0) | trackbacks(0) | pookmark |
hasAndBelongsToMany関連
CakePHPのHABTMの書き方メモ

hasAndBelongsToManyである条件でデータをとる方法がよくわからなかったが、
CakePHP hasAndBelongsToMany でページング(SQL LIMIT)とかを設定する
を読んで理解。

例えば Post,Profile,Tag というModelで

Post->hasOne->Profile
Post->hasAndBelongsToMany->Tag

という形だと

Post Modelでこういう書き方が可能ですが

Post Model
$data = $this->findAll(
$conditions = “Profile.delFlg<>‘del’”
);

これはできません。

Post Model
$data = $this->findAll(
$conditions = “Tag.delFlg<>‘del’”
);

なぜなら hasOne はLEFT JOIN しているので
Profile というテーブル名が使えるのですが
hasAndBelongsToMany はID切り出しでSelectかけるため
PostモデルのFindAllからはテーブル名が使えないためです。

でこの場合はこうする

Post Model
$this->hasAndBelongsToMany['Tag']['conditions'] = “delFlg<>‘del’”;
$data = $this->findAll(
$conditions = “”,
);

hasManyの場合も同じ。

ようはアソシエーションを書き換えるわけですね。

なのでこれを利用して

Post Model
$this->hasAndBelongsToMany['Tag']['limit'] = “$page,10″;
$data = $this->findAll(
$conditions = “”,
);

とこう書けば、引数 $page を元にアソシエーション先のページングができるわけです。




JUGEMテーマ:インターネット


| tako | cakephp | comments(0) | trackbacks(0) | pookmark |
WordPressをCakePHP下に入れる
CakePHPにWordpressを入れる(?)方法

Narendra:Integrate WordPress into CakePHPを読んでそのまま.htaccessを設定。

Now, the first thing is if you want to integrate WordPress in CakePHP, you have to put that in app/webroot folder. So, put WordPress folder into app/webroot of your CakePHP.

But cake doesn’t keep the address to http://www.example.com/blog/ but it changes address to http://www.example.com/app/webroot/blog/.

After doing some research, I found the solution for this that I have to edit .htaccess file to rewrite the url address.

Now open .htaccess file from your CakePHP root directory and replace the content with following lines.

RewriteEngine on
RedirectMatch temp ^/blog/wp-admin$ http://www.example.com/blog/
RewriteRule ^blog$ blog/ [L]
RewriteRule ^blog/wp-admin$ blog/wp-admin/ [L]
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]


CakePHP内の app/webroot フォルダ内にWordpressのファイルを丸ごと入れて、CakePHPのルートディレクトリの.htaccessを上記のように変更。


JUGEMテーマ:インターネット


| tako | cakephp | comments(0) | trackbacks(0) | pookmark |