Pages

ラベル CakePHP2 の投稿を表示しています。 すべての投稿を表示
ラベル CakePHP2 の投稿を表示しています。 すべての投稿を表示

2016年1月8日金曜日

CakePHP2 & CakePHP3 の alphaNumeric は日本語も通過する

CakePHP2 & CakePHP3 の alphaNumeric が日本語も通過しちゃうので、内容を確認したメモ


ソース

public static function alphaNumeric($check) {
  if (is_array($check)) {
    extract(self::_defaults($check));
  }

  if (empty($check) && $check != '0') {
    return false;
  }
  return self::_check($check, '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du');
}

パターン

http://php.net/manual/ja/regexp.reference.unicode.php

\p{Ll} | 小文字アルファベット
\p{Lm} | 擬似文字
\p{Lo} | 大文字小文字の区別や修飾文字を持たないその他の文字
\p{Lt} | タイトル文字
\p{Lu} | 大文字アルファベット
\p{Nd} | 多言語における10進数字

パターン修飾子

D (PCRE_DOLLAR_ENDONLY)

この修飾子を設定すると、パターン内のドルメタ文字は、検索対象文字列の 終わりにのみマッチします。
この修飾子を設定しない場合、ドル記号は、 検索対象文字列の最後の文字が改行文字であれば、その直前にもマッチします。
この修飾子は、m を設定している場合に無視されます。
Perl には、この修飾子に等価なものはありません。

u (PCRE_UTF8)

この修正子は、Perl 非互換な PCRE の機能を有効にします。
パターンと対象文字列は、 UTF-8 として処理されます。
この修正子は、UNIX では PHP 4.1.0 以降、Win32 では PHP 4.2.3 以降で 使用可能です。
また、PHP 4.3.5 以降では、パターンの UTF-8 としての妥当性も確認されます。
な対象文字列を preg_* 関数に渡しても、何もマッチしません。
無効なパターンを渡すと、E_WARNING レベルのエラーが発生します。
5オクテットおよび6オクテットの UTF-8 シーケンスは、PHP 5.3.4 以降 (PCRE 7.3 2007-08-28 以降) では無効とみなされます。
以前のバージョンでは、これらも UTF-8 として有効だとみなされていました。

※ 上記説明解りにくい人はこのサイトの説明見たら解るかも?
http://pentan.info/php/reg/use.html

処理内容

つまり上記文字のどれかが1回以上利用された文字だけで構成されたものかをチェックする

2014年10月28日火曜日

CakePHP2 セットアップ ライブラリ部分のみサブモジュールとして管理

CakePHPのセットアップ

$ git init
$ git pull https://github.com/cakephp/cakephp.git
$ rm -fr .git
$ rm -fr .gitignore
$ rm -fr lib
$ git init
$ git add .
$ git commit -m 'first commit'

$ git submodule add https://github.com/cakephp/cakephp.git
$ git submodule init
$ git submodule update

$ vi app/webroot/index.php
$ vi app/webroot/test.php

//define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');

define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'cakephp' . DS . 'lib');

$ vi app/Console/cake.php

$install = $root . DS . 'lib';

$install = $root . DS . 'cakephp' . DS . 'lib';


$ git add .
$ git commit

$ git remote add origin [repository]
$ git push -u origin master

プラグインの追加

$ git submodule add git://github.com/cakephp/debug_kit.git app/Plugin/DebugKit
$ git submodule add git://github.com/CakeDC/search.git app/Plugin/Search

2014年4月24日木曜日

CakePHP2 Securityコンポーネントでハマった事

Securityコンポーネント使ったらログインフォームだけが何故かblackholeに行ってしまう現象が発生。。
追跡してみるとフィールドをハッシュ化しているところがどうやら問題。

/lib/Cake/Controller/Component/SecurityComponent.php
line: 238

の $this->validatePost と $this->_validatePost($controller) をダンプしてみた
ところ true, false となっていた。

_validatePost 内を確認

line: 514 の前で

$token, $check をダンプしてみると中身が違う。。

$fieldListを確認してみるもちゃんと取得できている様子。。

何故だ。。。。

まさかとは思うけど発行側で??

と思って、

/lib/Cake/View/Helper/FormHelper.php

を今度はチェックしてみる。

どうやら

public function end($options = null)

で発行しているようなので、

line: 519

にある

$out .= $this->secure($this->fields);

の前で $this->fields を確認。

var_dump($this->fields);

空っぽ。。。

何で。。。

で、viewファイルをずっと眺めていると。。

$this->Form->create(...
$this->form->text(...

あれ。。 もしかしてformだといけてる風になる?? と思って修正。

$this->Form->create(...
$this->Form->text(...

無事動きましたとさ。。 form が何のために使えるのは調べてないけど、エラーにしてくださいよ。。

2014年1月11日土曜日

CakePHP2 Shell 実行時にモデルでエラーが発生する

/app/Console/Command 内に **Shell.php ファイルを作成して
uses にモデルを追加したところで試しに

$this->out('Hello');

でも出力しようと試したところで、下記のようなエラーが発生。

Fatal error: Class 'I18n' not found in /***/***.php on line 462
Fatal Error Error: Class 'I18n' not found in [/***/***.php, line 462]

モデルの中を全てコメントアウトすると表示されなかったので、
メソッド毎に徐々にコメントアウトを解除すると、 afterFind が原因である事が判明。

誤:
public function afterFind($results) {}

正:
public function afterFind($results, $primary = false) {}

上記修正で解決。

Followers