Cakephpでルーティングが動かない!?

ComposerでいれたCakephpを動かしてみる | bgbgbg
の手順で新しい環境に入れて、localhost/sample/myappとアクセスするとエラーが..

cakephp-error

デフォルトルートを見るはずがAppControllerを見てしまってるようです
Apacheをいれてて、mod_rewriteは有効にしたし、どうした..とはまりましたが原因は

ls -al /var/www/html/

sample -> /home/user/sample/myapp

とシンボリックリンクの貼る位置を間違えていたのが原因でした

composerでいれる手順として

$ mkdir /home/user/sample/ & cd /home/user/sample/
$ vim composer.json
$ composer install
$ Vendor/bin/cake bake project app

としたので
Cakephpのパッケージファイルは /home/user/sample/Vendor/cakephp
Cakephpの作ったアプリは /home/user/sample/myapp

ComposerでいれたCakephpを動かしてみる | bgbgbg
の設定だと

$ ls -s /home/user/sample /var/www/html/sample
としてしまったところを

$ ls -s /home/user/sample/myapp /var/www/html/sample

として http://localhost/sample
とアクセスする必要がありました

CakephpでOracleのrowidも取る

CakephpでOracleのrowidが取りたかったので調べました

モデルのvirtual fieldを使うといいようです
バーチャルフィールド — CakePHP Cookbook 2.x ドキュメント

モデルに追記

     public $virtualFields = array('rowid'=>'rowid');

これでfindとかすれば、rowidも合わせて取れました

Cakephpのコントローラーでpaginateをトップページに飛ばす

ページ制御 — CakePHP Cookbook 2.x ドキュメント
であるように存在しないページにアクセスされた時の処理を書いてみました

試行錯誤した結果、これで..

$this->Paginator->settings = $paginate;
try {
    $companies =  $this->Paginator->paginate($mainModel);
} catch (NotFoundException $e) {
    $whiteList = $this->Paginator->whitelist;
    $key = array_search('page', $whiteList);
    if ($key !== false) {
        unset($whiteList[$key]);
    }
    $this->Paginator->whitelist = $whiteList;
    $companies =  $this->Paginator->paginate();
}

whiteListからpageを外してpageの指定を無視させてます
アドレスが
http://sample.net/page:2
とか残ったままですが、最初のページ(page:1)が表示されます

うーん、もっといいやりかたがあるような気がします

Ubuntuにphpenvで複数バージョンのphpをいれる

諸事情で古めのphpが必要になったので、phpenvを試してみました
エラーでまくりでかなり時間かかりましたが、手順をまとめておきます

必要なものをいれます
$ sudo aptitude install -y libxml2 re2c autoconf bison libxml2-dev libcurl4-dev libjpeg62 libjpeg62-dev libreadline6-dev libpng12-0 libpng12-dev libtidy-dev libxslt-dev libltdl-dev libltdl7 libltdl7-dev libmcrypt-dev openssl libcurl4-openssl-dev

phpenv、php-buildを落としてきます

$ curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash
$ git clone git://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build
$ echo ‘export PATH=”$HOME/.phpenv/bin:$PATH”‘ >> ~/.bashrc
$ echo ‘eval “$(phpenv init -)”‘ >> ~/.bashrc
$ exec $SHELL -l

configureのオプションを修正
$ vim ~/.phpenv/plugins/php-build/share/php-build/default_configure_options

enable-fpm
を消して
–with-apxs2=/usr/sbin/apxs
を追記

$ phpenv install -l
でバージョンを確認

$ phpenv install 5.3.29
でだめだったので

rootになって試しました(phpenvを入れなおしたかも)
$ sudo -s
$ phpenv install 5.3.29
で入りました

php.iniが
~/.phpenv/versions/5.3.29/etc/php.ini
にあります

date.timezone = Asia/Tokyo
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock

を追記

phpenv-apache-versionをいれます
$ git clone https://github.com/garamon/phpenv-apache-version ~/.phpenv/plugins/phpenv-apache-version

バージョンセット
$ phpenv apache-version 5.3.29

apache再起動して完了

苦労しました..

(参考)
ubuntuにphp-buildでphp5.5を入れるためにシェルスクリプトと格闘した記録 | hirobanex.net
phpenvの導入して複数バージョンのPHPを管理する – Qiita
Hunting Field: もう一度php-5.3.8を入れる
ubuntuにphp-buildでphp5.5を入れるためにシェルスクリプトと格闘した記録 | hirobanex.net