CakePHP 2.1.1 への移行の記録

まだ書きかけです。


初めてCakePHPを触ったのは、バージョン1.1のとき。
その頃に購入した書籍も、ずいぶん時代遅れになってしまいました。
ということで、現在最新版の2.1.1を導入する際の備忘録を記しておきます。


【環境】
OS : Linux Mint 12 LXDE
サーバ : Apache (XAMPP for Linux 1.7.7)
使用DB : MySQL


【目次】
  1. 初期設定
  2. Configフォルダ
  3. Controllerフォルダ
  4. Localeフォルダ
  5. Modelフォルダ
  6. Viewフォルダ
  7. コンソールとシェル
  8. さくらサーバへアップロード


初期設定

CakePHPを使用可能にする下準備です。
トップページの警告を全て解除していきます。


Security.salt と Security.cipherSeed を変更
暗号を作るための素として、2項目設定しなくちゃいけないようです。
Cake1.3では、Security.saltだけでよかったんですが。
まあ、cipherSeedにも、てきとーに数字を入れておきました。

【app/Config/core.php (187行目)】
Configure::write('Security.salt', '---何らかの文字列---');

【同じく192行目】
Configure::write('Security.cipherSeed', '---何らかの整数値---');


『tmp』フォルダを"読み書き実行"可能に
おそらくWindowsでは必要のない作業だと思います。

$ sudo chmod -R 777 CakePHP/app/tmp


データベース設定
Cake1.3の設定方法と若干変わっていました。
使用するデータベースの名前を格納する場所の名前が、『driver』から『datasource』に変わりました。
下記の4つ以外のDBも、若干の設定ファイルの追加で使用可能になるようですが…。MySQLを使うための設定】

public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'kiteltag',
'prefix' => '',
'encoding' => 'utf8'
);
以上で、使用準備が整いました。
ここからは、各フォルダを見比べながらひとつずつファイルをコピーしていきます。


Configフォルダ

【変更したファイル、フォルダ一覧】
1.3系:config2.1系:Config
bootstrap.phpbootstrap.php
core.phpcore.php
database.phpdatabase.php
routes.phproutes.php

bootstrap.php
アプリ内で使う定数を定義しています。
下記をコピペしました。

define('PIC_WIDTH', 100); //画像自動リサイズ用(横)
define('PIC_HEIGHT', 100); //画像自動リサイズ用(縦)
define('NO_IMAGE', 'no_image.png'); //ユーザ顔写真のデフォルト画像


core.php
(前節で変更している箇所は省略します)


デバッグレベルを 2 から 1 へ変更。

Configure::write('debug', 1);


セキュリティレベルを medium から low へ変更。

Configure::write('Security.level', 'low');
【参考】
CakePHP】Security.levelはlowにすべき
http://d.hatena.ne.jp/sutara_lumpur/20100622/1277160482


database.php
前節で変更しているので、省略します。


routes.php
特定のパスを指定された場合、どのアクションを実行させるかを設定しています。
以下のように書き換えました。

//初期設定
//Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

//キテるタグ用の設定
Router::connect('/', array('controller' => 'tags', 'action' => 'index'));


Controllerフォルダ

【変更したファイル、フォルダ一覧】
1.3系:controllers2.1系:Controller
app/app_controller.phpapp/Controller/AppController.php
(一般的なコントローラ)
例:tags_controller.php
TagsController.php
(OAuth consumer component)(CakePHP2.x系用に変更)

AppController.php
『app_』の親役のクラスは、appフォルダ直下からそれぞれの部門のフォルダ直下へと移動しなければなりません。
変更したもの

__()

Locale


Configure::write('Config.language', $lang); //$lang='eng'または'jpn'
一般的なコントローラ

__()

OAuth consumer component
OAuthを手軽に利用できる『OAuth consumer component』がCakePHP 2.x系に対応したので、旧コンポーネントとまるごと入れ替えています。
vendors内のOAuth.phpは2.x系では使わないので削除しました。
注意点は、名称が少し変更されていることです。
"OauthConsumer"から"OAuthConsumer"へ。
コンポーネントを読み込んでいるコントローラ内での記述を変更する必要があります。


Qdmailは2.x系への対応はまだのようなので、しばらくはメール送信フォームは非表示にします(-_-;)


Localeフォルダ

『locale/eng/LC_MESSAGES』内の default.po を
『Locale/eng/LC_MESSAGES』内へコピーしました。


Modelフォルダ

ファイル名を
『tag_list.php』から『TagList.php』へ変更しました。


Viewフォルダ

各コントローラのView、
Elements、
Errors、
Helper、
twitter.php -> TwitterHeper.php
Layouts

__()


コンソールとシェル

cronなどで自動実行させたい処理について。
ファイルの置き場所、ファイル名の変更
1.3系/CakePHP/vendors/shell/test_hello.php
2.x系/CakePHP/app/Console/Command/TestHelloShell.php


クラス定義方法の変更
1.3系
class TestHelloShell extends Shell {
2.x系
class TestHelloShell extends AppShell {


端末からの実行方法
1.3系
$ /path/to/php /path/to/CakePHP/cake/console/cake.php test_hello -app /path/to/app
2.x系
$ /path/to/php /path/to/CakePHP/app/Console/cake.php test_hello -app /path/to/app


シェルでコンポーネントを使う
1.3系

App::import('Component', 'OauthConsumer');
class TestHelloShell extends Shell {
function startup() {
$this->OauthConsumer = new OauthConsumerComponent($this);
}
function main() {
$this->OauthConsumer->post( ... );
}
}
2.x系

App::uses('ComponentCollection', 'Controller');
App::uses('OAuthConsumerComponent', 'Controller/Component');
class TestHelloShell extends AppShell {
public function startup() {
$collection = new ComponentCollection();
$this->OAuthConsumer = new OAuthConsumerComponent($collection);
parent::startup();
}
function main() {
$this->OAuthConsumer->post( ... );
}
}
2.x系
(OAuth consumer classの場合)


App::import('Vendor', 'OAuth/OAuthClient');
class TestHelloShell extends AppShell {
public function startup() {
parent::startup();
}
function main() {
$client = new OAuthClient(
'(Consumer key)',
'(Consumer secret)'
);
$client->post( ... );
}
}
【参考】
CakePHP2系のShellでComponentを使う。 - ihiro81の日記
http://d.hatena.ne.jp/ihiro81/20111110/1320935758


さくらインターネットへアップロード

普通にFTPでアップロードしたところ、ブラウザに
Internal Server Error 500』
と表示され、このメッセージでGoogle検索していたので
一向に解決例にたどり着けませんでした。
が、ついに光明が。
【参考】
"さくらインターネットで404エラー" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=76&forum=2


各".htaccess"に"RewriteBase"を指定してやればいいようですね。
Cake2.1.1の".htaccess"はRewriteBase以外でも上記の記述と違う部分が
ありますが、リンク先のコードをそのままコピーして構いません。


さくらサーバのエラーログ確認方法
そもそも、詳しいエラーログの在り処を知らなかったことが、解決に手間取った原因でした。
メモを残しておきます。


さくらサーバの管理画面



で、下記のログの文章をそのままググったら一発でしたよ(つД`)


mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.


ドキドキ!SSH初体験
さらに脱線しますが、Linuxの端末から遠隔地のサーバの中身を覗く、ということを初めて体験しました。

$ ssh -l (ユーザ名) (ドメイン名)
【例】
$ ssh -l foo-bar foo-bar.sakura.ne.jp
(その後、パスワード入力)
これで、"pwd"でカレントディレクトリを確認しつつ、
"chmod"でパーミッションを変更したり
"vi .htaccess"でファイルをちょこちょこっと修正したりできます。
…こんなに簡単だったんだ…( ゚д゚)ポカーン