Re:

のあんのブログ

タグ:cakePHP

CASEとかSUMしたときにモデルキーではなく0にグループされる。

そんな時はバーチャルフィールド!って今知った。

バーチャルフィールド — CakePHP Cookbook v2.x documentation
http://book.cakephp.org/2.0/ja/models/virtual-fields.html

cakeの仕様って広くて深いから、熟知するにはいろいろ試してないと仕事で使えない。


その昔実装しきれなかったユーザマスタ1:N のロボ処理ができたので(アクティブ>非アクティブ>ロボ)、次はいよいよバトルを作ろうかなーあー。

実装方法の試行錯誤がメインであって、サービス作るとかそういうのは考えず。


たまに忘れて調べることがあるからメモっとこ!

ServerName dirname.hoge.jp
ProxyPass / http://192.168.11.217/dirname/
ProxyPassReverse / http://192.168.11.217/dirname/

ディレクトリ直下の .htaccess でリライト設定( /app, /app/webroot の .htaccess ではない)
# mod_rewrite
RewriteRule ^dirname(.*)$ app/webroot/$1 [L] 

リライト設定をしないとスタイルシートとかの読み込み先が /dirname/css/default.css とかで 404 Not Found になっちゃうんでね(´・ω・`) /css/default.css it's ok!

2系になってからシェルを作ってなかったので、メモがてら残しておこう。

ファイルの保存場所は app/Console/Command/

AppStoreShell.php
<?php
class AppStoreShell extends AppShell {
public function main(){
$this->out('Hello, AppStore');
  }
public function test(){
$this->out('test dayo');
}
}

ファイル名、クラス名はキャメルケースで付けるのが2系。

コントローラだとデフォルトアクションがindex()だけど、シェルはmain()だと思えばおk。


コンソールのコマンドラインから直接実行する場合は、以下の形式で実行できる。

$ cake -app /path/to/app app_store
Welcome to CakePHP v2.1.3 Console
---------------------------------------------------------------
App : app
Path: /path/to/app/
---------------------------------------------------------------
Hello, AppStore

$ cake -app /path/to/app app_store test

上記例のクラス名がAppStoreShellなので、渡す引数のクラス名はapp_storeである。

class AppstoreShell〜だったらappstoreになるよ。

※/path/to/appはCakePHPを展開したディレクトリ
※cakeにパスが通っていない場合は.bash_profileなどでPATH=/path/to/lib/Cake/Console
※ちなみに、ユーザファイルのapp/Console/cakeでもOK(かも)
※どこからでもcakeコマンドは実行できるようになるが、結局-appでCakePHPのapp/ディレクトリを指定していないと変なエラーがでる(気がする) 


cronで実行させる場合

$ crontab -e
* * * * * /usr/local/bin/php /path/to/app/Console/cake.php app_store > /dev/null 2>&1
Consoleの下にcake.phpがあるのでそれを実行する。


2.0 stableになってからまともにCakePHPに触れてなかったので、とゆーか、普段1.2系に触れてるのもあって、様変わりしてる2.0系は弱いんだよねー。


強いてSmartyを組み込みたいが為にGoogle先生にお世話になったメモ。
 

先生に「cakephp 2.0 smarty」と質問するとこのURLを教えてくれます。

http://www18.atwiki.jp/javascripter/pages/26.html

ま、一番目にヒットする内容のページが広告などなどで崩れてるのもあって整形してくれてるWikiみたいなんだけれど、とりあえずこのソースをコピって /app/Views/SmartyView.php を新規作成してペーストした。

-$this->subDir = 'smarty'.DS;
+$this->subDir = ''; 

ソースの中でこの修正をしておかないと、例えば /Views/Pages/smarty/display.tpl を読み込むので /Views/Pages/display.tpl とストレートにお願いしたいから(ctp共存の仕様なのかな?知らない)。

あと、Layoutsの中だけは /smarty/default.tpl じゃなくて何故かそのまま default.tpl を読むので…。


ちなみに、コピペのソースだと routes.php でテンプレートが指定されてても無視してメソッド名のテンプレートを呼んだので別途対応しないとそれは機能しないかもしれない(デフォルトでは pages コントローラの display メソッドが実行されて home テンプレートを呼ぶはずなのにそのまま display だった)。

↑ものすごい勘違いで、CoreにあるPagesController.phpではパラメータとしてrender()に設定されるからhomeテンプレートが読み込まれるのであって、ユーザコントローラ(app/controller/PagesController.php)を作った際に特別処理しなければ普通にdisplayテンプレートが呼ばれる挙動で正常だった orz


以上が整えば、各コントローラのクラス変数 $viewClass = 'Smarty'; でおk!

ってそんな面倒なことはしないよね…、AppController で指定したら継承するだけでおk!


class AppController extends Controller {
  public $viewClass = 'Smarty'; # Smartyって書いとくとSmartyViewとして先のファイルをロード
}



最後に最初にやるべき内容を補足しとくと、Smartyをダウンロード&解凍したら

  1. libs → smarty へフォルダ名リネーム
  2. /app/Venders/smarty として設置

 
もちろんネイティブに<?php echo $name; ?>とかショートタグで<?=$name?>の方が軽いと思うよ。

でもショートタグは推奨されないしさー、もうテンプレの可読性で嫌になる時もしばしば。


だから {$name} とか書きたいじゃん?(´・ω・`)おれだけ?


 
みんなが幸せでありますように!


いまのところ、ごくありふれたフォトコンテンツ。

イメージは、ブログやSNSよりもTwitter的な使い方なんだけど、うまくまとまりません。

まぁ、cakePHPを覚えるがてらの作成なので、いろはが盛り込まれてれば、それはそれで後から拡張していけば良いのかな〜と考えてますけど、コンテンツとして成り立つまで、まだ時間が掛かりそう。

dm_view1dm_view2

↑このページのトップヘ