views内のテンプレートに記述するなら
<?
php echo Configure::version()
?>
cakephpのバージョンを表示する。
CakePHPで管理画面と公開画面を切り替えたい場合
core.phpの
//Configure::write(‘Routing.admin’, ‘admin’);
のコメントアウトを外す、と、
たとえばpostsコントローラ内で
function admin_index(){}
とした場合のURLが
http://TEST.COM/admin/posts/index
となる。
▼CakePHPのcore.phpの設定
http://www.okushin.co.jp/kodanuki_note/2009/05/cakephpcorephp.html
Cakephpのurl内のindex.php2
どうも
http://TEST.COM/index.php/posts/edit
とか
/index.php/が出ちゃう。mod_rewrite使えるようにしてるのに。と思ったら
mod_rewriteが使える設定と使えない設定を両方ごっちゃにやってたみたいw
CakePHPでmode_rewriteが使えない場合は、
core.phpの
//Configure::write(‘Routing.admin’, ‘admin’);
のコメントアウトを外して
以下3つの.htaccessを削除もしくはリネームする
/.htaccess
/app/.htaccess
/app/webroot/.htaccess
ということなので
CakePHPでmod_rewriteが使える場合は、
care.phpも3つの.htaccessもデフォルトのままでやれば
/index.php/無しのURLになる。
/index.php/が入る部分の記述は、
/app/webroot/.htaccessの
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
!-dは、ディレクトリが無ければ、
!-fは、ファイルが無ければ、
index.phpへ処理を渡すという指定。
RewriteRuleに合致するファイルやディレクトリが実在する場合は、RewriteRuleを適用しなくなる。
※RewriteCondはRewriteRuleごとに必要。
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
で、/index.php/に関する指定。
webroot直下
/にアクセスすると、/index.php/?以降のファイルを表示する。
rewriteしてるので
/posts/editになるが、
/index.php/posts/editも存在する。
元々のwebroot/index.phpは存在するので
rewrite_ruleは適用されず、
ドメイン/では表示されず、
ドメイン/index.phpで表示される。
Cakephpのurl内のindex.php1
適当にチュートリアルをやると
http://TEST.COM/posts/add
とかいうURLが
http://TEST.COM/index.php/posts/add
トいう感じに
/index.php/が必要になる。
mod_rewriteを使っていないとこの/index.php/が出てくるらしい。
core.php
CakePHPの「__」アンダースコア×2関数
アンダースコア2つの関数
__();
第1引数:文字列
第2引数:デフォルト値はfalseでecho出力。trueにすると戻り値は返却。
basics.phpに関数定義されている。
__(‘Hello World’);
poファイル(.po)に翻訳を列挙しておくと、その部分が現在の言語設定によってその言語に変換される。自動翻訳ではなく設定通りの翻訳される。
何も設定していなければそのまま文字出力をする。
http://blog.asial.co.jp/377
http://www.multiburst.net/ElectricBrain/2008/08/cakephp12
CakePHPのpaginateをsmartyで使う
cakephpでpagination with smartyという記事参照。
{if $pagination->setPaging($paging)}
{assign var=”leftArrow” value=”前へ”}
{assign var=”rightArrow” value=”次へ”}
{assign var=”prev” value = $pagination->prevPage($leftArrow,false)}
{if !$prev}{assign var=”prev” value = $leftArrow}{/if}
{assign var=”next” value = $pagination->nextPage($rightArrow,false)}
{if !$next}{assign var=”next” value = $rightArrow}{/if}
{assign var=”pages” value = $pagination->pageNumbers(” | “)}
{$pagination->result(‘条件に合った先生:’, ‘人中’)}人目
({$pagination->resultsPerPage(‘同時表示件数’, ‘ ‘)})
検索結果ページ:{$prev} {$pages} {$next}
{/if}
http://server.typepad.jp/dragonfly/2007/06/cakephppaginati_3fed.html
cakephpでセッションが消える
セッションを使ってログインを設定したら、うまくいかない。
入力したIDとPASSは合ってるのにログインできなかった。ログインエラーというか、エラーなのかすらわからない。何も起こらない。
間違ったIDとPASSを入れてみると、Validationは有効だった。設定通りにログインエラーと表示される。
入力値が正しいときにうまく動かない。
Sessionが消えていた。
セッションがなんで消えるのか。
CSSが原因だった。
!んなバカな!
画像やCSSで実際に存在しないパスやURLを指定していると鯖にHTTPアクセスを行う。
全て正しいパスを指定するとうまくいく。
が、いちいち修正するのもめんどい。
このアクセスを行うのは、app/webrootの中の.htaccessの
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
だそうなので
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(cgi|css|gif|jp?g|png)$
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
こんな感じに修正すればいいそうだ。
http://mick.blog16.jp/index.php/main/2008/03/06/cakephp_session_cake_security
http://d.hatena.ne.jp/takuya15/20071109/1194576191
stdClassのエラー
cakephpでmail関数でsendの際に
Fatal error: Call to undefined method stdClass::send()
が表示された。
オブジェクトを定義していないのに変数を定義してしまうと
クラス名がstdClassとして認識されるらしい。
ほー。で、
$this->Email->send();
のEmailを定義してなかったw
class AppController extends Controller {
var $components = array(‘Email’);
}
ドットコマンド
シェルコマンド
ドット(.)
現在のシェルでコマンドを実行する
スクリプトを呼び出したシェルと同じシェルでコマンドの実行が可能。
スクリプトから呼び出したコマンドで環境変数を変更するとその内容は失われてしまうが
(.)ドットコマンドを使えば実行するコマンドの中で
現在の環境を変更できる。
他のコマンドを実行するための環境設定を行うラッパー(あるプログラムの返り値を別のプログラムに渡すためのプログラム)としてスクリプトを作成するのに便利。
スクリプト内でも使用可能。
coreserverのcakeでconsoleを使う
cd public_html/XXX/cake/cake/console
./cake
すると
./cake: Permission denied
なので
chmod 744 cake
自分に実行許可 他人は書き込み禁止
で
./cake
すると
Welcome to CakePHP v1.X.X.X Console
以下略