CakePHP 2.1.1 への移行の記録
まだ書きかけです。
初めてCakePHPを触ったのは、バージョン1.1のとき。
その頃に購入した書籍も、ずいぶん時代遅れになってしまいました。
ということで、現在最新版の2.1.1を導入する際の備忘録を記しておきます。
【環境】
OS : Linux Mint 12 LXDEサーバ : Apache (XAMPP for Linux 1.7.7)
使用DB : MySQL
【目次】
初期設定
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も、若干の設定ファイルの追加で使用可能になるようですが…。
- Database/Mysql - MySQL 4 & 5
- Database/Sqlite - SQLite (PHP5 only)
- Database/Postgres - PostgreSQL 7 and higher
- Database/Sqlserver - Microsoft SQL Server 2005 and higher
以上で、使用準備が整いました。
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'kiteltag',
'prefix' => '',
'encoding' => 'utf8'
);
ここからは、各フォルダを見比べながらひとつずつファイルをコピーしていきます。
Configフォルダ
【変更したファイル、フォルダ一覧】
1.3系:config | 2.1系:Config |
---|---|
bootstrap.php | bootstrap.php |
core.php | core.php |
database.php | database.php |
routes.php | routes.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系:controllers | 2.1系:Controller |
---|---|
app/app_controller.php | app/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系 |
|
---|---|
2.x系 |
|
2.x系 (OAuth consumer classの場合) |
|
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の端末から遠隔地のサーバの中身を覗く、ということを初めて体験しました。これで、"pwd"でカレントディレクトリを確認しつつ、
$ ssh -l (ユーザ名) (ドメイン名)
【例】
$ ssh -l foo-bar foo-bar.sakura.ne.jp
(その後、パスワード入力)
"chmod"でパーミッションを変更したり
"vi .htaccess"でファイルをちょこちょこっと修正したりできます。
…こんなに簡単だったんだ…( ゚д゚)ポカーン