CakePHP::ユニークな値かどうかチェック(重複チェック)

4月 15th, 2008 admin

ユーザIDなど重複したら困る時のチェック。よく使うのでメモ
MySQLの場合は、DBのuniqueを使ったスマートな方法もあります。

コード

/model/user.php

PHP:
  1. function unique($field){
  2.        foreach( $field as $key => $value ){
  3.            $this->recursive = -1;
  4.            $found = $this->find(array("{$this->name}.$key" => $value));
  5.         }
  6.            return !$found;
  7.     }

/controller/user_controller.php

PHP:
  1. //省略 addメソッドとか
  2.             if($this->data['User']['username'] && !$this->User->unique(array("username" => $this->data['User']['username']))){
  3.                 $this->User->invalidate("unique");
  4.             }
  5.  
  6.             if ($this->User->save($this->data)) {
  7. //・・・以下省略

/view/user/add.ctp

PHP:
  1. <td width="65%">
  2.         <?php echo $form->input('User/username', array('label' => false)); ?>
  3.         <?php echo $form->error ('User/unique', 'このIDはすでに使用されています。');?>
  4.     </td>

CakePHP1.2での管理者用レイアウト設定

4月 14th, 2008 admin

admin routingを使っていて、adminの時だけ別のレイアウトを設定したい場合。
こうやってみればいいんじゃないかという例

コード

PHP:
  1. <?php
  2. //app/app_controller.php
  3. class AppController extends Controller {
  4.     function beforeRender() {
  5.         echo $this->action;
  6.         if (preg_match("/^" . Configure::read('Routing.admin')  . "_/i", $this->action)) {
  7.                 $this->layout = 'admin_default';
  8.         }
  9.     }
  10. }
  11. ?>

まとめ

他のやり方ってあるのかな?知りたいです。
あと、管理者用とユーザ用のコントローラを分けたいときにRailsのようにcontrollers/admin/user_controller.phpみたいにディレクトリを切りたいんだけど、それもやり方を知りたい。今はadmin_user_controller.phpとかを作っているけどカッコ悪い

PHPで祝日を取得

3月 31st, 2008 admin

アルバイトの人が書いてくれた祝日リスト。祝日って意外と少ないんだなーと思った。
祝日の計算はできなくもないんだけど、結局規則が変わったりするので人の手無しでは駄目と言うことで割り切る
google calendarに20011年12月でアラートをしておいたけど、3年後もgoogle calendarを使っているかどうか不安なのと、法改正とかがあったときに、この関数を思い出すかどうかかなり不安だ

コード

	/**
	 * 任意の月の祝日を取得する
	 *
	 * @access public
	 * @param integer 取得する月
	 * @param integer 取得する年
	 * @return mixed
	 */
	 function getHoliday($month,$year = null){
	 	$year = is_null($year)? date('Y'):$year;

        $array = array(
		   2007 => array(
				1 => array(1=>1,8=>1),
				2 => array(11=>1,12=>1),
				3 => array(21=>1),
				4 => array(29=>1,30=>1),
				5 => array(3=>1,4=>1,5=>1),
				6 => array(),
				7 => array(16=>1),
				8 => array(),
				9 => array(17=>1,23=>1,24=>1),
				10 => array(8=>1),
				11 => array(3=>1,23=>1),
				12 => array(23=>1,24=>1)
				),
		   2008 => array(
				1 => array(1=>1,14=>1),
				2 => array(11=>1),
				3 => array(20=>1),
				4 => array(29=>1),
				5 => array(3=>1,4=>1,5=>1,6=>1),
				6 => array(),
				7 => array(21=>1),
				8 => array(),
				9 => array(15=>1,23=>1),
				10 => array(13=>1),
				11 => array(3=>1,23=>1,24=>1),
				12 => array(23=>1)
				),
		   2009 => array(
				1 => array(1=>1,12=>1),
				2 => array(11=>1),
				3 => array(20=>1),
				4 => array(29=>1),
				5 => array(3=>1,4=>1,5=>1,6=>1),
				6 => array(),
				7 => array(20=>1),
				8 => array(),
				9 => array(21=>1,22=>1,23=>1),
				10 => array(12=>1),
				11 => array(3=>1,23=>1),
				12 => array(23=>1)
				),
		   2010 => array(
				1 => array(1=>1,11=>1),
				2 => array(11=>1),
				3 => array(21=>1,22=>1),
				4 => array(29=>1),
				5 => array(3=>1,4=>1,5=>1),
				6 => array(),
				7 => array(19=>1),
				8 => array(),
				9 => array(20=>1,23=>1),
				10 => array(11=>1),
				11 => array(3=>1,23=>1),
				12 => array(23=>1)
				),
		   2011 => array(
				1 => array(1=>1,10=>1),
				2 => array(11=>1),
				3 => array(21=>1),
				4 => array(29=>1),
				5 => array(3=>1,4=>1,5=>1),
				6 => array(),
				7 => array(18=>1),
				8 => array(),
				9 => array(19=>1,23=>1),
				10 => array(10=>1),
				11 => array(3=>1,23=>1),
				12 => array(23=>1)
				)
  		 );
               return $array[$year][$month];
	 }

phpのcurlでPOST送信する際の注意

2月 26th, 2008 admin

curlってのを使うと簡単にスクリプト内でPOSTリクエストを送信して結果を得ることができるのですが
オレオレ証明書のサーバに対してhttpsに対してリクエストを送信するにはCURLOPT_SSL_VERIFYPEERというオプションをFALSEにしておく必要がある。

$ch=curl_init();
curl_setopt ($ch,CURLOPT_URL,"https://example.com/");
curl_setopt ($ch,CURLOPT_POST,1);

//postするデータ
$post = "user_id=001&price=105";

curl_setopt ($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt ($ch,CURLOPT_RETURNTRANSFER, 1);

var_dump(curl_exec($ch));
curl_close ($ch);

CakePHP::HABTMの編集画面を作る

2月 13th, 2008 admin

CakePHP1.1の話。ほかのやり方があったら教えて欲しいです。ちょっと面倒。

目的

CakePHPのブログチュートリアルのようにエントリーに複数のタグをつけるような場合で

<?php echo $habtm->checkboxMultiple('Tag/Tag', $tags, $selected_tags, array('multiple' => 'multiple')) ?>

こうやって書いたら、チェックボックスでタグがダラダラーとでてきて、もちろん選択済みのものが選択されている状態を作るのが目的。

選択済みのタグのリストを作る

shepherdweb
上記サイトのとおりにやってください!

セレクトボックスをやめてチェックボックスにする

Create Multiple Checkboxes Instead of a Multiple-Select in your Views
上記サイトのとおりにやってください!(habtmヘルパーをインクルードするのを忘れずに)

以上