يوفر هذا التمديد نموذج بحث موحد لـ YII ActivereCord.
للحصول على معلومات الترخيص ، تحقق من ملف الترخيص.
الطريقة المفضلة لتثبيت هذا الامتداد هي من خلال الملحن.
إما تشغيل
php composer.phar require --prefer-dist yii2tech/ar-search
أو إضافة
"yii2tech/ar-search" : " * "إلى قسم المتطلبات من الملحن الخاص بك.
يوفر هذا الامتداد نموذج بحث موحد لـ Yii ActivereCord عبر فئة نموذجية خاصة - yii2techarsearchActiveSearchModel .
هذا النموذج قادر على جلب سماته وقواعد التحقق من الصحة وتصفية منطق "Slave" ActivereCord المحدد عبر yii2techarsearchActiveSearchModel::$model . وبالتالي لا تحتاج إلى إعلان فئة نموذج منفصلة للبحث وتحديد منطق المرشح. على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem '
]);
$ dataProvider = $ searchModel -> search ( Yii :: $ app -> request -> queryParams ); يختار ActiveSearchModel جميع السمات "الآمنة" لنموذج "الرقيق" واستخدامها كسمات خاصة. وبالتالي ، يمكنك استخدام أي سمة ، والتي يتم تمييزها على أنها "آمنة" في نموذج ActivereCord ذي الصلة في نطاق هذه الفئة. على سبيل المثال:
<?php
namespace appmodels;
// ActiveRecord to be searched:
class Item extends yiidb ActiveRecord
{
public function rules ()
{
return [
[[ ' name ' , ' status ' , ' price ' ], ' required ' ],
[ ' name ' , ' string ' ],
[ ' status ' , ' integer ' ],
[ ' price ' , ' number ' ],
];
}
}
use yii2techarsearch ActiveSearchModel ;
// Create search model for declared ActiveRecord:
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem '
]);
// safe attributes of `Item` are inherited:
$ searchModel -> name = ' Paul ' ;
$ searchModel -> price = 10.5 ;يمكن استخدام السمات الموروثة أثناء تكوين نماذج الويب ، والتي يجب أن تجمع بيانات المرشح. على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
use yiiwidgets ActiveForm ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem '
]);
?>
<?php $ form = ActiveForm :: begin (); ?>
<?= $ form -> field ( $ model , ' name ' )-> textInput () ?>
<?= $ form -> field ( $ model , ' price ' )-> textInput () ?>
...
<?php ActiveForm :: end (); ?>تورث ملصقات السمات والتلميحات أيضًا من نموذج "الرقيق".
الطريقة الرئيسية لـ yii2techarsearchActiveSearchModel هي search() . يقوم بتحميل سمات التصفية من صفيف البيانات المعطى ، ويؤدي صحة لها إلى إنشاء مثيل yiidataActiveDataProvider الذي يطبق سمات خاصة كشرط مرشح استعلام.
يستخدم ActiveSearchModel منطقًا متطورًا لتصفية الاستعلام ، استنادًا إلى أنواع السمات ، المحددة بواسطة yii2techarsearchActiveSearchModel::$searchAttributeTypes ، والتي يتم استخراج القيمة من yii2techarsearchActiveSearchModel::$model yii2techarsearchActiveSearchModel::$filterOperators . بشكل افتراضي yiidbQueryInterface::andFilterWhere() سيتم استخدامه لتكوين المرشح. بالنسبة لسمات "السلسلة" ، سيتم استخدامها مع "مشغل" مثل ". من أجل "Integer" و "Float" ('double') ، سيتم استخدام andFilterCompare() ، إذا كانت متوفرة.
انتباه! لا تسيء استخدام استخدام ActiveSearchModel . لقد تم تصميمه لتغطية أبسط الحالات فقط ، عندما يكون منطق البحث تافهًا. يجب عليك دائمًا إنشاء نموذج بحث منفصل في حالة ، فهو يتطلب منطقًا معقدًا لتكوين استعلام البحث.
قد ترغب في تغيير بعض الإعدادات لمزود البيانات ، الذي تم إنشاؤه بواسطة طريقة search() : تغيير ترقيم الصفحات أو فرز الإعدادات وما إلى ذلك. يمكنك القيام بذلك عبر yii2techarsearchActiveSearchModel::$dataProvider . على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem ' ,
' dataProvider ' => [
' class ' => ' yiidataActiveDataProvider ' ,
' pagination ' => [
' defaultPageSize ' => 40
],
],
]);
$ dataProvider = $ searchModel -> search ( Yii :: $ app -> request -> queryParams );
echo $ dataProvider -> pagination -> defaultPageSize ; // outputs `40` يمكنك استخدام yii2techarsearchActiveSearchModel::EVENT_AFTER_CREATE_QUERY حدث لضبط مثيل استعلام البحث الذي يضيف علاقة حريصة أو شروط دائمة. على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
use yii2techarsearch ActiveSearchEvent ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem ' ,
]);
$ searchModel -> on ( ActiveSearchModel :: EVENT_AFTER_CREATE_QUERY , function ( ActiveSearchEvent $ event ) {
$ event -> query
-> with ([ ' category ' ])
-> andWhere ([ ' status ' => 1 ]);
}); يمكنك أيضًا تحديد كائن الاستعلام مباشرة عبر yii2techarsearchActiveSearchModel::$dataProvider . على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
use yiidata ActiveDataProvider ;
use appmodels Item ;
$ searchModel = new ActiveSearchModel ([
' model ' => Item :: className (),
' dataProvider ' => function () {
$ query = Item :: find ()
-> with ([ ' category ' ])
-> andWhere ([ ' status ' => 1 ]);
return ActiveDataProvider ([ ' query ' => $ query ]);
},
]); يمكنك التحكم في المشغلين لاستخدامها في تصفية الاستعلام عبر yii2techarsearchActiveSearchModel::$filterOperators . إنه يحدد التعيين بين نوع السمة والمشغل لاستخدامه مع yiidbQueryInterface::andFilterWhere() . يمكن أن تكون كل قيمة اسم مشغل قياسي أو رد اتصال PHP ، قبول مثيل الاستعلام واسم السمة والقيمة. على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem ' ,
' filterOperators ' => [
ActiveSearchModel :: TYPE_STRING => ' = ' , // use strict comparison for the string attributes
ActiveSearchModel :: TYPE_INTEGER => function ( yiidb ActiveQueryInterface $ query , $ attribute , $ value ) {
if ( $ attribute === ' commentsCount ' ) {
$ query -> andHaving ([ ' commentsCount ' => $ value ]);
} else {
$ query -> andFilterWhere ([ $ attribute => $ value ]);
}
},
],
]); يسمح ActiveSearchModel بالتصفية للسمات باستخدام طريقة andFilterCompare() للاستعلام (على سبيل المثال: yiidbQuery::andFilterCompare() ) ، والتي تسمح بتحديد قيمة المرشح بالتنسيق: {operator}{value} (على سبيل المثال: >10 ، <=100 ، يتم التحكم في قائمة أسماء السمات ، والتي يتم التحكم فيها من أجل استخدام هذه المقارنة بواسطة yii2techarsearchActiveSearchModel::$compareAllowedAttributes . على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
$ searchModel = new ActiveSearchModel ([
' model ' => ' appmodelsItem ' ,
' compareAllowedAttributes ' => [
' price ' // allow compare for ' price ' only, excluding such fields like ' categoryId ' , ' status ' and so on.
],
]); يمكنك تعيين compareAllowedAttributes على * ، مما يشير إلى أن أي سمة تعويم أو عدد صحيح سيسمح بالمقارنة.
ملاحظة:
yii2techarsearchActiveSearchModel::$filterOperatorsلها الأسبقية علىyii2techarsearchActiveSearchModel::$compareAllowedAttributes
على الرغم من أن إعداد yii2techarsearchActiveSearchModel::$model هو أسرع طريقة لتكوين مثيل ActiveSearchModel ، فهو ليس إلزاميًا. يمكنك تجنب إعداد نموذج "العبد" وتكوين جميع الخصائص المتعلقة بالبحث مباشرة. على سبيل المثال:
<?php
use yii2techarsearch ActiveSearchModel ;
use yiidata ActiveDataProvider ;
use appmodels Item ;
$ searchModel = new ActiveSearchModel ([
' searchAttributeTypes ' => [
' id ' => ActiveSearchModel :: TYPE_INTEGER ,
' name ' => ActiveSearchModel :: TYPE_STRING ,
' price ' => ActiveSearchModel :: TYPE_FLOAT ,
],
' rules ' => [
[ ' id ' , ' integer ' ],
[ ' name ' , ' string ' ],
[ ' price ' , ' number ' ],
],
' compareAllowedAttributes ' => [],
' dataProvider ' => function () {
$ query = Item :: find ()
-> with ([ ' category ' ])
-> andWhere ([ ' status ' => 1 ]);
return ActiveDataProvider ([ ' query ' => $ query ]);
},
]);