cakephpであいまい検索(LIKE検索)をする方法を調べたけど本当にこれで良いの?

cakephpではfindというメソッドにいろいろ引数を渡してDBから結果がとれる。


SELECT user_name FROM users WHERE user_name = 'ムッシュかまやつ';

みたいなSQLとほぼ同じことをやってもらう方法は

$this->User->find( 'all',
array( 'condition' => array(
'user_name' => 'ムッシュかまやつ')
)
);

という感じ。いかにもいろいろなオプションが
渡せそうなfindメソッド(実際いろいろ出来る)

しかし、LIKE検索をしようと思って本で調べてネットで調べてとしたところ、
なかなか方法が出てこない。(cakephp あいまい検索、とか)
唯一出てきた方法が以下のようにfindメソッドを呼び出すというもの


$this->User->find( 'all',
array( 'condition' => array(
'user_name LIKE' => '%' . 'ムッシュかまやつ' . '%')
)
);

ええ? これ本当?

cakephp使用時にでjQueryで$.post()を使おうとしてハマったこと

jQuery.ajax()はオプションとして設定出来る項目が多すぎるので、
引数にオブジェクトを渡して使用する。例えば以下のような感じ


jQuery.ajax({
url: "test.html",
cache: false,
success: function(html){
$("#results").append(html);
}
});


jQuery.post()は4つの引数をとる。以下のような感じ


jQuery.post(
'post.php',
data,
callbackFn,
'JSON'
);

引数の数が違う。型も違う。
結論から言うとpostメソッドにオブジェクト型の引数を渡していた。
以下のような感じ。


jQuery.post({
url: 'post.php',
data:data,
callback:callbackFn,
type:'JSON'
});

もちろんきちんと動かない。
ただ、firebugが「リクエスト先が存在しない」というエラーをはいてくれず、
かわりにcakephpがレスポンス内に「viewファイルが無いみたいですよ」
というエラーをくれていた。

firebug上でリクエスト先のURLがおかしなことになっていたが、
不慣れなcakephpを使っていたので原因がサーバ側、.htaccessにあると
思いこんでなかなか気がつけなかった。

通信関連のことでハマってるときは、フレームワークうんぬんのせいにしないで、
httpリクエストとレスポンスの内容をきちんと見ないと、ダメ・ダメ。

PHPで echo false; を実行すると、一文字も出力されない。

PHPで echo false; を実行すると、一文字も出力されない。

これはecho関数が「引数で渡されたものを文字列化して表示する」という特性を持つため。

 

PHPではfalseを文字列化すると空文字となる。

結果、echo false; では空文字が出力され、一文字も出力されないことになる。

macでcakephpの環境を作成しているときに.htaccessが表示されなくて変なハマり方をした

macでcakephpの環境を作成しているときにミスをした。

 

前提としてmacでは「.htaccess」のようにファイルの先頭に

ドット(.)がついているファイル名のファイルはmacは

隠しファイルだと認識する為Finder上で表示されない。

 

その結果、cakephpの中身を他のディレクトリにコピーする際に

.htaccess」をコピーし漏らしてしまったため、

cakephpのトップ画面で以下のようなエラー文言が出てしまった。

「URL rewriting is not properly configured on your server. 」

 

以下のウィジェットを入れてmacで隠しファイルを表示するようにする。

http://www.apple.com/downloads/dashboard/developer/hiddenfiles.html

cakephpのディレクトリ直下に.htaccessが無いことがわかったので

これを補完して一件落着

 

[php]「<?php」は「?>」で閉じない方が良いそうです。

phpファイルを作成するときはファイルの冒頭

「<?php」などで記述が始まることが多いかと思いますが、

これは「?>」で閉じない方が良いそうです。

 

理由は phpブロック外の部分をサーバーが読み込むときに誤作動を起こす場合がある為

基本的にはphpブロック内で記述を終え(「?>」で閉じずに終え)、

処理をサーバー側に渡すのが良いそうです。