ΠΠ»Π°ΡΡ Π΄Π»Ρ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² Yii2
Π§ΡΠΎ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ? Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Yii-ΡΡΠ΅ΠΈΠΌΠ²ΠΎΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ°Π²ΠΈΠ» Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.
ΠΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ, ΡΡΠΎ Π²Ρ Π½Π΅Π·Π°Π±ΡΠ»ΠΈ ΠΈΡ
ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π½Π΅ ΡΠ΄Π°Π»ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ
. ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ unit-ΡΠ΅ΡΡΡ
Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠΠ°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΠ±Π»Π΅Π³ΡΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π²Π°ΡΠΈΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ., (*1)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
$ php composer.phar require developeruz/yii-matcher "*"
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
use developeruz\yii_matcher\ModelMatcher;
class ValidateTest extends TestCase {
public function testPhoneIsSafeOnlyInRegistration()
{
$userModel = new ModelMatcher('app\models\User');
$userModel->shouldBeSafe('phone', 'registration');
$userModel->shouldBeNotSafe('phone');
}
public function testUserHasPostsRelation()
{
$userModel = new ModelMatcher('app\models\User');
$userModel->hasMany('posts', 'app\models\Post', ['user_id' => 'id']);
}
public function testLoginLength()
{
$userModel = new ModelMatcher('app\models\User');
$userModel->matchLength('login', 3, 20);
}
}
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
-
shouldBeSafe() ΠΈ shouldBeNotSafe() - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ°
-
shouldBeRequired() ΠΈ shouldBeNotRequired() - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
-
matchLength() - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄Π»ΠΈΠ½Π½Ρ ΡΡΡΠΎΠΊΠΈ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° min ΠΈΠ»ΠΈ max,
Π·Π°Π΄Π°ΠΉΡΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ null.
-
hasOne() ΠΈ hasMany() - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ²ΡΠ·Π΅ΠΉ
ΠΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΠΌΡ Π°ΡΡΡΠΈΠ±ΡΡΠ° ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - ΡΡΠ΅Π½Π°ΡΠΈΠΉ., (*2)
PS: Π‘ ΡΠ°Π΄ΠΎΡΡΡΡ ΠΏΡΠΈΠΌΡ pull-request Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ matcher-Π°ΠΌΠΈ. ΠΠ»ΠΈ ΠΏΠΈΡΠΈΡΠ΅ Π² issue ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ ΡΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, (*3)