画面にHTMLを表示する、時刻を表示する

PHPでHTMLを表示する場合はprint または echo を使用します。

<?php

print('ここに記入')

?>

時刻を表示するときはdateを使用します。

<?php
print(date('Y m j s'));
?>

dateファンクションは画面に表示する機能はもっておらず、【戻り値】として内容を得られるだけです。文字列と連結するときは、
.(ドット)を使って戻り値と文字列を連結します。

<?php
print('現在は'.date('G i s').'です')
?>

データを入れたのに出力されない。。。

入力しただけでは出ない場合もある。

while true; do ./console/cake sumflags; ./console/cake updateExec; done

while true; 回転させる
do       実行
./console/cake sumflags;
./console/cake updateExec;
done     停止

sumflagsが検索しても見つからない…

本日の仕事はコーディングであったのだが作業に移る前に実際にデータを出力した際、どのように表示されるかが見たかったので、取りあえず該当のデータ部分を登録したのだが出力されない。
結果から言えば入力した登録データを出力するには出力するという命令を実行させなければならず、それを行っていなかったので出力されなかったということでした。
たまたまだったのですが、今までやった仕事はデータを入力すれば勝手に出力してくれるものばかりであったので今回のものはテラタームで命令をしないと実行し出力してくれないものははじめてでした。

その命令文が上に書いてあるものです。
これを行うと
./console/cake sumflags;と/console/cake updateExec;を一通り実行してくれます。
そして対象ページに出力されるというながれです。
明日は、この命令自体を確認しブログに載せたいと思います。

CakePHPでVirtualFieldsを使う

virtualfieldsは任意のSQL表現をつくり、モデルのフィールドとして割り当てることができます。作成したフィールドは保存することができません。find関数等で他の引数と渡すとエラーになりますので注意が必要です。その場合は渡す前に空にもどしましょう。その他データベースにバーチャルフィールドと同じ名前があるとエラーを引き起こします。

バーチャルフィールドの作り方
モデルAにバーチャルフィールドを作成します。

1:モデルAのバーチャルフィールドを追加します。

$this->virtualFields = array(
  ‘rank’ => ‘sum(User.rate)’,
  );

2:フィールドに追加します。

  $fields = array(
   ’conditions’ => array(‘User.agecheck’ => 1),
‘fields’ => array(
‘User.id’,
‘User.rate’
‘User.rank’
)
);

$res = $this->ModelA->find(‘all’, $fields);

ザックリかきすぎてしまった。
また今度書き直そう・・・ではっ!

Cakephp エラー対処法 warning: missing argument ~ 

warning: missing argument ~ というのは、

定義された引数と、呼び出す引数が違いますよというエラーです。

例えば、

 

function f_name ($x, $y) {
 echo $x . "ok";
 echo $y . "ok";
}

と定義して、呼び出すときに

f_name($y);

だとエラーになってしまいます。

こういうときは、初期値をにすればいいでしょう。

function name($x = null){
 if($y){
  処理1
 }else{
  処理2
 }
}

Cakephp Modelのテストケース作成

あるユーザーが職業選択ができて、そのラジオボタンを削除したり追加したりできるような仕様ががあった場合のテストケースを作成しました。そこでcakephp2のModelにtestSave()とtestDelete()を作成しました。

Fixtureに登録しているユーザーデータに基づいて記述してみました。

public function testSave(){

// もともとid=4まである、4件Fixtureに書いてある
$result = $this->MstJobType->find(‘count’);
$this->assertEquals(4, $result);

// idが4番まであったら、次に登録するデータは5番になるはず
// まだ登録していないので5番のデータが取れないチェック
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 5,
),
‘contain’ => false
));
$expected = array(); // 結果とれない!
$this->assertEquals($expected, $result);

// 5番になるデータを登録する
$update = array(
// MstJobTypeに登録するための項目(画面と同じだからadd.ctp/edit.ctpをチェック)
‘MstJobType’ => array(
‘name’ => ‘公務員’,
‘slug’ => ‘civilworker’,
‘deleted’ => 1
)
);
$this->MstJobType->create(); // 初期化(おまじない)
$this->MstJobType->save($update); // 保存

// 5番のデータが作成されたので、データが取れる
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 5,
),
‘contain’ => false
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 5,
‘slug’ => ‘civilworker’,
‘deleted’ => true,
‘name’ => ‘公務員’,
)
);
unset($result[‘MstJobType’][‘created’]); // 作成時間:実行した時間が登録されちゃうと比較できないので、検索結果から消しておく
unset($result[‘MstJobType’][‘modified’]); // 更新時間:これも同じ
$this->assertEquals($expected, $result);

// テーブルの中身が1件増えたので5件になってる
$result = $this->MstJobType->find(‘count’);
$this->assertEquals(5, $result);
}

/**
* testDelete
* @return void
*/
public function testDelete() {
// 今あったものが無くなる(削除される)テスト
// 削除されていないデータがテーブルの中に2件ある(Fixtureに記載されているデータの件数)
$result = $this->MstJobType->find(‘count’, array(
‘conditions’ => array(
‘MstJobType.deleted’ => false
)
));
$this->assertEquals(2, $result);

// Fixtureに記載されているあるデータが取得できるかチェック
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 3,
)
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 3,
‘name’ => ‘会社員’,
‘slug’ => ‘employee’,
‘created’ => ‘2015-02-22 15:35:03’,
‘modified’ => ‘2015-02-22 15:35:03’,
‘deleted’ => false
),
‘User’ => array()
);
$this->assertEquals($expected, $result);

// このもともとあった↑データを削除する
$this->MstJobType->id = 3;
$this->MstJobType->delete();

// 今削除されたものがちゃんと取得できなくなったかのチェック
// 最初に実行したfindと同じ条件で再度チェックする
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 3,
)
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 3,
‘name’ => ‘会社員’,
‘slug’ => ‘employee’,
‘created’ => ‘2015-02-22 15:35:03’,
‘deleted’ => true
),
‘User’ => array()
);
unset($result[‘MstJobType’][‘modified’]); // 更新時間:削除されたときの実行時間が登録されてしまうので、消しておく
$this->assertEquals($expected, $result);

// 削除されていないデータは、テーブルの中に1件になった
$result = $this->MstJobType->find(‘count’, array(
‘conditions’ => array(
‘MstJobType.deleted’ => false
)
));
$this->assertEquals(1, $result);
}

【注意点】

*削除されていないデータ、つまりdeleted=>falseの数を変更すること。
*削除対象のデータに対して ’User’ => array();を追加することで、
その職業で登録されているユーザーデータも削除されるという感じで
必ず記述する(array()の中は何も書かなくていい)。

*実際に削除されたということを記述するにはdeleted=>falseから
deleted=>trueに変更して、現在の削除されていないデータ(deleted=>false)は
1件になったので$this->assertEquals(1, $result);と記述する。

phpにて分岐を作成するためのメモ書き。(2パターン)

<!-- 年齢 -->
				<?php if($user['User']['secret_check'] == false): ?>
			<div class="row">
				<div class="col-xs-3"><span class="myfont font_pink"><?php echo __('Age'); ?></span></div><!-- /.col -->
				<div class="col-xs-9"><?php echo h($user_age); ?> </div><!-- /.col -->
			</div><!-- /.row -->
			<hr>
		<?php elseif($user['User']['secret_check'] == true): ?>
					<?php endif; ?>

			<!--誕生日任意コメント  -->

			<div class="row">
				<div class="col-xs-3"><span class="myfont font_pink"><?php echo __('Secret'); ?></span></div><!-- /.col -->
				<!--checkboxにチェックが入っていたら誕生日(任意コメント)を表示、それ以外は誕生日を表示-->
				<div class="col-xs-9">
					<!-- 条件分岐 -->
					<?php if($user['User']['secret_check'] == true): ?>
						<?php echo h($user['User']['secret']); ?>
					<?php elseif($user['User']['secret_check'] == false): ?>
						<?php echo h($user['User']['birthday']?date('Y/m/d', strtotime(h($user['User']['birthday']))):''); ?>
					<?php endif; ?>
				</div><!-- /.col -->
			</div><!-- /.row -->
			<hr>

if文作成の時には『if』『elseif』『endih』が大体セット。
ifの時、これ。そうじゃない場合をelseif。定義が終わりだからendif。

分岐に使う命令文はこちらを参照。
http://www.clas.kitasato-u.ac.jp/~yamamoto/c06.html

これがうまく動くかテストシステムを作成しなければならないので、起こりうる問題として・・・
・誕生日を入力しないでチェックも入れないでエラーが起きないか
・誕生日を入力しないでチャックを入れてエラーが起きないか
・誕生日を入力しないでチェックを入れないでコメントを書いてエラーが起きないか
・誕生日を入力してチェックを入れないでコメントを書いてエラーが起きないか
・誕生日を入力してチェックを入れてコメントを書いてエラーが起きないか

明日、確認。

ジャックナイフストレッチ~10秒体操~

みなさん。特にパソコンと日々戦っているみなさん。腰の具合は大丈夫ですか?

何十時間も座りっぱなしだと腰に重力がかかり、神経を圧迫して腰痛の原因になってしまいます。

しかし、最近の研究から実は腰痛の原因は’腰’ではなく’太もも裏側’が硬直状態であるからだといわれています。今日は腰痛予防の一つである。ハムストリング体操=”ジャックナイフストレッチ”の方法をご紹介します。

~ジャックナイフストレッチ~

【順序】

ジャックナイフストレッチ

①足を肩幅に広げてしゃがみ込み、膝と胸をつけた体勢になります。

②足首をつかみ、膝と胸が離れないように注意しながら足を伸ばします。

③これ以上足が伸びないポイントで10秒間保持します。

④上記①~③の動作を3セットから5セットおこないます。

【ジャックナイフストレッチの効果】

・腰痛予防、改善。
・身体の柔軟性アップ。
・お尻のヒップアップ効果。
・骨盤が動きやすくなり腰への負担が減り、自然と背筋が伸びる。
など

*ただ、このストレッチ法も万能ではありません。

前屈した時に腰が痛い人や、ヘルニアを患っている人は、逆に悪化させる場合があるそうですから、このような人はやらない方が良いそうです。

ふとももをやわらかくしましょう♪

簡単なので、是非試してみてください♪

同僚のブログに乗っかるメモ書き

同僚がテストケースについて書いております。

https://parafamily.co.jp/2015/08/%E3%83%86%E3%82%B9%E3%83%88%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%AE%E8%A6%81%E7%82%B9%E3%80%80cakephp/

同じことを一緒にやっており、ブログには綺麗にまとめていますが、なん通りもcodeの入力にミスり、テスト前にそもそもエラーを喰らったことは秘密です。

$result = $this->Article->getArticleName(3);
$compare = array(
‘Article’ => array(
‘title’ => ‘うぁーがんばろー’, ←ここの部分
)
);
$this->assertEquals($compare, $result);

ここの部分ですが、一番最初に$compare = ‘うぁーがんばろー’
と書いたのですが、もちろんエラーです。
そもそも文字とgetArticleNameさえ、あってりゃええんやろと
書いたら、エラーです。
コンピューターは、どこの『‘うぁーがんばろー’』だよということで
エラーなんですね。

同僚は10通りほど失敗したらしいのですが、ぜひ、どのようなミスをしたかブログに書いていただきたいものです。

テストケースの要点 Cakephp

テストケースは、開発したプログラミングに対して、意図しない動作をしないかを確認する作業です。

テストケースの書き方は

例えば

/Model/Articles.phpの
       * article名のみ取得する
public function getArticleName($article_id = null) {
$result = $this->find(‘first’, array(
‘conditions’ => array(
$this->alias.’.id’ => $article_id,
$this->alias.’.deleted’ => false,
),
‘fields’ => $this->alias.’.title’,
‘contain’ => array(),
));
return $result;
}

処理のテストケースを作成します。

===========================

補足

実行方法(teraterm)

・・・app]

全てのページを検証する場合

./Console/cake testsuite app AllTests

一つのページを検証する場合

./Console/cake testsuite app Model/Article

あるページの関数を検証する場合(debug(変数)等の中身おを調べたいとき)

./Console/cake testsuite app Model/Article –filter getArticleName(関数名)

==================================

検証する論理値(仮定しなければいけないこと)

実行する処理(今回は記事のタイトルを取得する)に対して、仮定することはいくつかあります。

①id(個人データ)があったら、そのタイトル名(Articleのtitle)を取得できるか

②削除済みのタイトルは取れない

③存在しないタイトルは取れない場合(削除されていない場合)

【実際のテストケース】

Model/Article.php

/**
* testGetTheAge method
*
* @return void
*/
public function testArticleName(){
// 存在しないタイトルは取れない
$result = $this->Article->getArticleName(99999999);
$compare = array(); //debug($result)
$this->assertEquals($compare, $result);
// 削除済みのタイトルは取れない
$result = $this->Article->getArticleName(6);
$compare = array();
$this->assertEquals($compare, $result);
// タイトルが取れる 
$result = $this->Article->getArticleName(3);
$compare = array(
‘Article’ => array(
‘title’ => ‘うぁーがんばろー’,
)
);
$this->assertEquals($compare, $result);
}

======================

【補足②】

始めに

@return void(->何も返さないよ) とか

@return array(->配列の返すよ)

など、返り値を設定しておきます。

*deletedの考え方

deleted = 削除済みのものを取ってくる

type P = false =>0、true=>1

*debug()関数に関して

debug()関数は取得したいデータを取ってきたい場合

実行したときにそのデータ処理が取得できます。

 

======================

Fixture(テストケースのデータ格納場所)の追加に関して

Fixtureに情報(データ)を格納したら、AllTestsをするとき、

そのときにでたエラーを修正していきます。

========================

このように、実行したい処理が何をしている処理なのか

(データを取得したいのか、削除したデータを取ってきたいのか、IF文で別々に処理しているのか、空の場合の処理なのか)

など、考えた上で、

テストケースは10パターンほど考えます。多ければ多いほどよいです。

このようにもし何かの不具合が見つかったら、何処が悪かったのかを検証できるので

基本的なことですがしっかりと見につけていけたらいいですね。

緩い土手シャイニング その2

前回のソフトバンク光についての続き

https://parafamily.co.jp/2015/08/%E7%B7%A9%E3%81%84%E5%9C%9F%E6%89%8B%E3%82%B7%E3%83%A3%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0/
前回、ブログに書かせていただきましたが家のネットを『ソフトバンク光』にしてみました。
結果から言うと、特に大きな問題はなく繋がりました。
ネットで言われているような悪評も特になく、繋がって3日ほど経ちましたが今のところ
問題ありません。

工事代の説明が適当で当日、工事に来た方に聞いてもわからない。と言われましたが
まぁ小さいことですね。

ただ、こちらに書いておこうと思うのがオプションの解約の仕方についてです。
オプションはショップに行っても解約できません。自分でカスタマーに電話して
オペレーターに頼まないとできません。

ちなみに電話番号はショップで教えられるのが有料ですが
ソフトバンクのホームページには無料の番号が載っています。
http://ybb.softbank.jp/support/sbhikari/inquiry.html

また、電話の途中で『カスタマーid』の入力をお願いされますが、
これは各自の契約書に書いてあるのですが、その場に契約書がなく
探していると「入力が確認できませんでした」と言われて
最初から入力してくださいと心を折ってきます。
実は、これにも抜け道があり『9999』と入力すれば
オペレーターに繋いでくれます。もう繋がれば、こっちのものです。
『ソフトバンク光以外のオプション以外は全部はずしてください』と
一言言えば『かしこまりました』と全部、外してくれます。
ちなみにオプションの解約メールが、7個ぐらい来ますがお気になさらず。

オプションを外さないと3800円が5000なんぼになるので、必ず外しましょう。