[CakePHP]scripts_for_layoutへのmeta(noindex等)の渡し方

[CakePHP1.3.11, 2.1.3]

CakePHPはコンテンツ部分をレイアウトに埋め込む、いわゆるレイアウトテンプレート型のビューなので、scripts_for_layout変数などを使って、コンテンツ部分からレイアウト部分にページ特有のcssやjsファイルなどを読み込ませることが出来るわけですが、このコンテンツ部分からレイアウトへの渡し方がバージョンによって異なるのでお気をつけ下さい、というエントリです。

1.2〜1.3の場合

※コンテンツ部分のビューファイルです。contacts/index.ctp等

[php]
<?php $html->meta(null, null, array(‘name’ => ‘robots’, ‘content’ => ‘noindex,follow’, ‘inline’ => false));?>
[/php]

2.x〜の場合

[php]
<?php $this->Html->meta(null, null, array(‘name’ => ‘robots’, ‘content’ => ‘noindex,nofollow’), false);?>
[/php]

もちろん、layoutファイルには、<head>タグ内に以下を入れるのをお忘れなく。

[php]
<?=$scripts_for_layout?>
[/php]

[CakePHP]Authで2種類のユーザー認証を設定する方法

[CakePHP1.3.11]

今回は、Webサービスによくよくあるパターンである、サイト管理者向けページと、ユーザーページ(いわゆるマイページというやつ)2つの専用ページを持つサイトにおける、Auth設定方法を書いておきます。対象は、CakePHP1.3ですが、2.xでもほぼ同様のコードで動作します。

なお、この記事では、サイト管理者ページ名を、admin、マイページをmemberとして進めていきます。認証方法は、admin:Basic認証、member:ログイン画面にてメールアドレスとパスワードの認証とします。

まず、config/core.phpの、prefix設定のところを、以下のようにします。

[php]
Configure::write(‘Routing.prefixes’, array(‘admin’, ‘member’));
[/php]

そして、app_controller.phpで以下のように設定します。

[php]
class AppController extends Controller {

var $components = array(‘Session’, ‘Auth’);

function beforeFilter() {

$this->Auth->allow(‘*’);

//Auth Settings
if (!empty($this->params[‘prefix’]) && in_array($this->params[‘prefix’], Configure::read(‘Routing.prefixes’))) {

$this->layout = $this->params[‘prefix’];

//for Administrator
if ($this->params[‘prefix’] == ‘admin’) {
$this->Security->loginOptions = array(‘type’ => ‘basic’, ‘realm’ => ‘Admin Area’);
$this->Security->loginUsers = array(‘admin’ => ‘Basic認証のパスワード’);
$this->Security->requireLogin();
}

//for Member
if ($this->params[‘prefix’] == ‘member’) {
$this->Auth->loginAction = ‘member/users/login’;
$this->Auth->loginRedirect = ‘member/users/index’;
$this->Auth->fields = array(‘username’ => ’email’, ‘password’ => ‘password’);
$this->Auth->autoRedirect = true;
$this->Auth->loginError = "IDかパスワードが正しくありません";
$this->Auth->authError = "Authentication Error";
}
}

}

}
[/php]

このように、AppController内の、beforeFilter内で現在のprefixesの値で分岐させて、Authの設定を切り替えます。上記が一番のポイントで、その他ログインなどは、CookBookに書いてある様にすれば大抵問題なく動きます。

[CakePHP]コントローラー内で一時的に一部validateを無効にする方法

[CakePHP1.2.3]

コントローラ内でvalidationをする際に、全てoffにするのは簡単です。

[php]
$this->Model->save($data, false);
[/php]

と、saveの第二引数にfalseをセットします。

しかし、一部のvalidationのみoffにしたい場合もあるでしょう。そういうときはどうすればいいのでしょうか。
実は、単純に以下のようにするだけなのでした。

[php]
//コントローラ内
unset($this->Account->validate[‘crosslink_url’]);
[/php]

他にも、モデル内でsetValidateなどのメソッドを作って切り替える、などの方法も考えられます。