Pages

2021年7月5日月曜日

FriendsOfCake / search の使い方メモ

FriendsOfCake/search

https://github.com/FriendsOfCake/search

インストール

composerをインストールした環境で

$ php composer.phar require friendsofcake/search

プラグインを追加したらソースから利用できるように

$ bin/cake plugin load Search

利用方法

https://github.com/FriendsOfCake/search/tree/master/docs

Tableの initialize() でビヘイベアを追加


同じく Table の initialize() に検索条件のテンプレートのようなもので コレクション を記載する。


解りにくいけど useCollection() から次の useCollection() までが1つのコレクションとなるみたい。

add() で追加できる1検索条件は色々なタイプが用意されている。

add() の第2パラメーターで、指定する他、メソッドからも検索タイプを指定可能。
この方が phpstorm とかなら候補で出てくるので解りやすい。

フィルター

  1. value()
    完全一致で検索をする。
  2. like()
    LIKE検索をする。
  3. boolean()
    結果を true または false で検索をする。
    ※true にはデフォルトで 1、true、 '1'、 'true'、 'yes'、 'on' を含む。
  4. exists()
    対象カラムがNOT NULLかを検索する。
  5. finder()
    finder****() という関数を使用して検索する。
    https://book.cakephp.org/3/ja/orm/retrieving-data-and-resultsets.html#custom-find-methods
  6. compare()
    比較演算子(>, <= など)を使って検索する。
  7. callback()
    コールバック関数を使って検索する。



対応オプジョン

共通で利用できるオプジョン

  1.  fields (array)
    検索に使用するフィールドの名前を指定する。
  2. name (string、デフォルトでは、add filterメソッドの最初の引数に渡された名前になります)
    フィルターの名前をフィールドとは別にしたい場合に利用する。
  3. alwaysRun (bool、デフォルトはfalse)
    存在するかどうかに関係なく、フィルタを常に実行するかどうかを定義する。
  4. filterEmpty (bool、デフォルトはfalse)
    空の場合に、フィルターを実行しないかどうかを定義する。
  5. flatten (bool、デフォルトはtrue)
    入力フォームから配列として渡される値をフラット化するかどうかを定義する。
  6. beforeProcess (callable、デフォルトはnull)
    $queryと$argsを引数として受け取ります。たとえば、クエリに結合または包含を設定するためにコールバックを使用。
  7. aliasField (bool、デフォルトはtrue)
    フィールド名にエイリアスを設定する場合に利用する。
  8. defaultValue (mixed、デフォルトはnull)
    デフォルト値を指定する。

Boolean

  1. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。

 Exists

  1. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。
  2. nullValue (stringまたはnull、デフォルトはnull)
    null許容でない列に使用できます。
    =/の!=代わりにIS NULL/を介してチェックするには、空の文字列に設定しIS NOT NULLます。

Compare

  1. operator (string、デフォルトは>=)
    比較に使用する演算子。有効な値は>=、<=、>と<。
  2. mode (string、デフォルトはAND)
    複数のフィールドと照合するときに使用する条件付きモード。
    有効な値は、ORとAND。

Like

  1.  multiValue (bool、デフォルトはfalse)
    フィルターが複数の値を受け入れるかどうかを定義します。
    無効になっていて、複数の値が渡されている場合、フィルターは defaultValue オプションで定義されたデフォルト値の使用にフォールバックします。
  2. multiValueSeparator (string、デフォルトはnull)
     特定の区切り文字列を使用して、フィルターが複数の値を自動トークン化するかどうかを定義します。無効にした場合、データは配列の形式である必要があります。
  3. colType (array)
    連想配列。実際の型に関係なく、文字列列として扱う必要がある列のカスタム型を設定するために使用します。これは、整数フィールドが検索対象のフィールドの一部である場合など、整数フィールドにとって重要です。使用例: 'colType' => ['id' => 'string']
  4. before (bool、デフォルトはfalse)
    検索語の前にワイルドカードを自動的に追加するかどうか 。
  5. after (bool、デフォルトはfalse)
    検索語の後にワイルドカードを自動的に追加するかどうか 。
  6. fieldMode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。有効な値は、ORとAND。
  7. valueMode (string、デフォルトはOR)
    複数の値を検索するときに使用する条件付きモード。有効な値は、ORとAND。
  8. comparison (string、デフォルトはLIKE)
    使用する比較演算子。
  9. wildcardAny (string、デフォルトは*)
    として扱われるべき文字列を定義する任意のそれは検索用語に遭遇している場合にワイルドカードを。この動作により、これは内部的に適切なSQL互換のワイルドカードに置き換えられます。これは、検索語内で実際のワイルドカード文字を使用して用語の一部として扱われるようにしながら、検索語内でワイルドカードを渡したい場合に役立ちます。たとえば、の検索語* has reached 100%はに変換され% has reached 100\%ます。さらに、オプションを参照してくださいescapeDriver。
  10. wildcardOne (string、デフォルトは?)
    検索語で検出された場合に1つのワイルドカードとして扱われる文字列を定義します。と同様に動作しwildcardAnyます_。つまり、検索語が使用された場合、実際のSQL互換ワイルドカード()はエスケープされます。
  11. escaper (stringへのデフォルトnull)
    エスケープする必要がありエスケー定義%とは_。エスケープ機能が設定されていない場合(escapeDriver => 'null')、エスケープ機能はデータベースドライバによって設定されます。ドライバがある場合 に使用される(エスケープするとします)。他のすべての場合に (エスケープに使用されるにし、に)。と設定にエスケープを追加することで、独自のエスケープを追加できます。SqlserverSqlserverEscaper%[%]_[_]DefaultEscaper%\%_\_App\Model\Filter\Escaper\OwnEscaper'escaper' => 'App.Own'

Value

  1. multiValue (bool、デフォルトはfalse)
    フィルターが複数の値を受け入れるかどうかを定義します。無効になっていて、複数の値が渡されている場合、フィルターはdefaultValueオプションで定義されたデフォルト値の使用にフォールバックします。
  2. multiValueSeparator (string、デフォルトはnull)
    特定の区切り文字列を使用して、フィルターが複数の値を自動トークン化するかどうかを定義します。無効にした場合、データは配列の形式である必要があります。
  3. mode (string、デフォルトはOR)
    複数のフィールドと照合するときに使用する条件付きモード。有効な値は、ORとAND。
  4. negationChar (string、デフォルトはnull)
    multiValue特に値が多い場合は、の代替。フィルタは任意の文字列を受け入れますが、理想的には、検索値のプレフィックスとして単一の一意の文字である必要があります。たとえば!、文字列値または-数値の場合。有効にすると、フィルターはこの値の式を無効にします。

Finder

  1. finder (string、デフォルトはフィルター名)
     使用する検索タイプ。
  2. map (array、デフォルトは[])
     フィールドをファインダーキー('to_field' => 'from_field')にマップする必要がある場合は、配列を構成します。
  3. options (array、デフォルトは[])
    ファインダーに渡す追加オプション。
 

2021年5月27日木曜日

[Flutter] flutter doctor で Android Studio が入っているのに認識してくれない時

Android Studio をインストールしてるのに

> flutter doctor

で確認すると

[!] Android Studio (not installed)

となる。。

そんな時は

 > flutter config --android-studio-dir="C:\Program Files\Android\Android Studio"

とインストール場所を教えてやると解決!!

[√] Android Studio



2021年5月22日土曜日

[CakePHP4] 翻訳ファイルの作成まで

翻訳辞書ファイル(.po)を作成するまでの手順

PS D:\prj\example.com\www.example.com> ./bin/cake i18n
I18n Shell
-------------------------------------------------------------------------------
[E]xtract POT file from sources
[I]nitialize a language from POT file
[H]elp
[Q]uit
What would you like to do? (E/I/H/Q)
> E
Current paths: None
What is the path you would like to extract?
[Q]uit [D]one
[D:\prj\example.com\www.example.com\src\] >

Current paths: D:\prj\example.com\www.example.com\src\
What is the path you would like to extract?
[Q]uit [D]one
[D:\prj\example.com\www.example.com\templates\] >

Current paths: D:\prj\example.com\www.example.com\src\, D:\prj\example.com\www.example.com\templates\
What is the path you would like to extract?
[Q]uit [D]one
[D] >

Would you like to extract the messages from the CakePHP core? (y/n)
[n] > y
What is the path you would like to output?
[Q]uit
[D:\prj\example.com\www.example.com\resources\locales\] >


Extracting...
-------------------------------------------------------------------------------
Paths:
   D:\prj\example.com\www.example.com\src\
   D:\prj\example.com\www.example.com\templates\
   D:\prj\example.com\www.example.com\vendor\cakephp\cakephp\src\
Output Directory: D:\prj\example.com\www.example.com\resources\locales\
-------------------------------------------------------------------------------
==========================================================================> 100%
default.pot is unchanged. Skipping.
cake.pot is unchanged. Skipping.

Done.

ここまでで .po ファイルの雛形となる .pot ファイルが作成される。

What would you like to do? (E/I/H/Q)
> I
Please specify language code, e.g. `en`, `eng`, `en_US` etc.
> ja_JP
What folder?
[D:\prj\example.com\www.example.com\resources\locales\] >

.po が ja_JP 以下に作成される。

2021年5月18日火曜日

[CakePHP4] bake template で index,view,add,edit 以外を追加

自分は
  • add.php
  • edit.php
  • index.php
  • view.php
以外にも form.php を作成していて、 add.php, edit.php からそれを呼び出して共通かしています。
なので、bakeコマンドで form.php も作ってほしい。

あと基本的には Bootstrap を利用しているので、テーマを自作してと。。
  • plugins/BootstrapTheme/templates/bake/Template/add.twig
  • plugins/BootstrapTheme/templates/bake/Template/edit.twig
  • plugins/BootstrapTheme/templates/bake/Template/index.twig
  • plugins/BootstrapTheme/templates/bake/Template/view.twig
  • plugins/BootstrapTheme/templates/bake/Template/form.twig
こんな感じ。

作成して 

$ ./bin/cake bake template

とするけど。。

いつも通り
  • add.php
  • edit.php
  • index.php
  • view.php
ができるだけ。。

form.php だけを追加するのは以下のようなコマンドでできるので、自分のそれで追加しています。。

$ ./bin/cake bake template samples form


2019年12月26日木曜日

[PHP] Amazon MWS API Feed のXMLをXSDファイルを利用してバリデート(検証)する

gontoraさんによる写真ACからの写真

Amazon MWS API を利用して出品する際にXMLで一覧を生成するのだが、その生成したXMLが正しいかを判別するために Amazon MWS API のドキュメントサイトで配布されている XSD を利用した。

http://docs.developer.amazonservices.com/ja_JP/feeds/Feeds_FeedType.html

注: XMLフィードの作成方法によっては、商品情報フィードではなく、アイテムフィードスキーマを使用するよう、出品者に求められます。

ほんまAmazon紛らわしいな。。
こんな紛らわしいのに開発環境提供してくれないし。。。

Item フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Item.xsd

Product フィード
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/Product.xsd

XSDを利用してのXML検証方法


$xml = new DOMDocument(); 
libxml_use_internal_errors(true);

$xml->load('./sample.xml');
 
if ($xml->schemaValidate('./validate.xsd')) { 
   echo "Success \n";
} 
else { 
    echo "Error \n"; 
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        echo display_xml_error($error, $xml);
    }
    libxml_clear_errors();
} 

function display_xml_error($error, $xml)
{
    $return  = $xml[$error->line - 1] . "\n";

    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "Warning $error->code: ";
            break;
         case LIBXML_ERR_ERROR:
            $return .= "Error $error->code: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "Fatal Error $error->code: ";
            break;
    }

    $return .= trim($error->message) .
               "\n  Line: $error->line" .
               "\n  Column: $error->column";

    if ($error->file) {
        $return .= "\n  File: $error->file";
    }
}

Followers