parameter是一個圍繞parameter的函式庫,它提供了具有驗證規則和模式自省的附加功能。
parameter可透過 Packagist 取得,儲存庫來源位於 chevere/ parameter 。
composer require chevere/ parameter
parameter可以使用額外的規則產生任何類型的動態parameter 。
例如,最小值為 10 的整數。
use function Chevere parameter int ;
$ int = int (min: 10 );
$ int ( $ var ); // exception if $var < 10
在函數或方法parameter中,您可以使用屬性來定義parameter和傳回值的驗證規則。
use Chevere parameter Attributes FloatAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
use function Chevere parameter validated ;
#[ReturnAttr(
new FloatAttr (min: 0 , max: 2400 )
)]
function wageWeekWA (
#[IntAttr(min: 1628 )]
int $ cents ,
#[FloatAttr(min: 0 , max: 40 )]
float $ hours
) {
return $ cents * $ hours / 100 ;
}
validated ( ' wageWeekWA ' , $ cents , $ hours );
可以使用validated
(上面的範例)、內聯和/或委託給呼叫者包裝器來觸發驗證。 parameter提供了存取parameter和傳回值規則的幫助程序,以簡化接線過程。
每個parameter定義的規則提供了一個人類可讀的模式,允許公開驗證標準。
parameter提供了一個API,可用來使用函數和/或屬性建立parameter 。 parameter物件可以直接在邏輯中使用,而屬性則需要讀取步驟。
使用內聯驗證從這裡開始:
if ( $ var > 10 || $ var < 1 ) {
throw new InvalidArgumentException ();
}
對此:
use function Chevere parameter int ;
int (min: 1 , max: 10 )( $ var );
使用屬性來定義parameter和傳回值的規則。
使用具有validated()
函數的屬性委託驗證來實作:
function myFunction ( int $ var ): string
{
if ( $ var > 10 || $ var < 1 ) {
throw new InvalidArgumentException ();
}
$ return = ' done ok ' ;
return preg_match ( ' /ok$/ ' , $ return )
? $ return
: throw new InvalidArgumentException ();
}
$ result = myFunction ( $ var );
對此:
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use Chevere parameter Attributes StringAttr ;
use function Chevere parameter validated ;
#[ReturnAttr(
new StringAttr ( ' /ok$/ ' )
)]
function myFunction (
#[IntAttr(min: 1 , max: 10 )]
int $ var
): string
{
return ' done ok ' ;
}
$ result = validated ( ' myFunction ' , $ var );
使用reflectionTo parameter s
和reflectionToReturn
函數手動驗證參數和傳回值:
use ReflectionFunction ;
use function Chevere parameter reflectionTo parameter s ;
use function Chevere parameter reflectionToReturn ;
$ reflection = new ReflectionFunction ( ' myFunction ' );
$ parameter s = reflectionTo parameter s ( $ reflection );
$ return = reflectionToReturn ( $ reflection );
$ parameter s (... $ args ); // valid $args
$ result = myFunction (... $ args ); // myFunction call
$ return ( $ result ); // valid $result
使用屬性內聯驗證在函數體內進行手動驗證:
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use Chevere parameter Attributes StringAttr ;
use function Chevere parameter valid ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new StringAttr ( ' /ok$/ ' )
)]
function myFunction (
#[IntAttr(min: 1 , max: 10 )]
int $ var
): string
{
valid (); // valid $var
$ return = ' ok ' ;
return returnAttr ()( $ return ); // valid $return
}
PHP 中的屬性僅支援可在類別常數上使用的表達式。無法使用屬性直接定義動態parameter 。
為了避免此限制,您可以使用CallableAttr
屬性,該屬性可以將parameter解析轉送到傳回parameter Interface
介面實例的可呼叫物件。
use Chevere parameter Interfaces parameter Interface ;
use Chevere parameter Attributes CallableAttr ;
function myCallable (): parameter Interface
{
return arrayp (
email: string (),
)-> withOptional (
name: string (),
);
}
#[CallableAttr( ' myCallable ' )]
parameter是實現parameter Interface
物件。每個parameter都可以定義description
和default
值,以及取決於類型的附加驗證規則。
可以使用函數和/或屬性來定義parameter ,兩者採用相同的參數。
當呼叫parameter $param('value')
時,它將觸發對傳遞的參數的驗證。
使用函數string
建立一個String parameter
。傳遞一個regex
進行字串比對。
use function Chevere parameter string ;
// Any string
$ string = string ();
// String matching bin-<digits>
$ string = string ( ' /^bin-[d]+$/ ' );
$ string ( ' bin-123 ' );
使用StringAttr
屬性定義字串parameter 。
use Chevere parameter Attributes StringAttr ;
#[StringAttr( ' /^bin-[d]+$/ ' )]
下面的parameter都是基於String的。
使用函數enum
建立與字串清單相符的String parameter
。
use function Chevere parameter enum ;
$ enum = enum ( ' on ' , ' off ' );
$ enum ( ' on ' );
$ enum ( ' off ' );
使用EnumAttr
屬性定義枚舉字串parameter 。
use Chevere parameter Attributes EnumAttr ;
#[EnumAttr( ' on ' , ' off ' )]
使用函數intString
建立與字串整數相符的String parameter
。
use function Chevere parameter intString ;
$ int = intString ();
$ int ( ' 100 ' );
使用函數boolString
建立符合0
和1
字串的String parameter
。
use function Chevere parameter boolString ;
$ bool = boolString ();
$ bool ( ' 0 ' );
$ bool ( ' 1 ' );
使用函數date
建立與YYYY-MM-DD
字串相符的String parameter
。
use function Chevere parameter date ;
$ date = date ();
$ date ( ' 2021-01-01 ' );
使用函數time
建立一個與hh:mm:ss
字串相符的String parameter
。
use function Chevere parameter time ;
$ time = time ();
$ time ( ' 12:00:00 ' );
使用函數datetime
建立與YYYY-MM-DD hh:mm:ss
字串相符的String parameter
。
use function Chevere parameter datetime ;
$ datetime = datetime ();
$ datetime ( ' 2024-01-09 10:53:00 ' );
使用函數int
建立一個Int parameter
。傳遞整數範圍的min
和max
, accept
接受的整數列表, reject
拒絕的整數列表。
use function Chevere parameter int ;
// Any int
$ int = int ();
$ int ( 1 );
// Integer between 0 and 100
$ int = int (min: 0 , max: 100 );
$ int ( 50 );
// Integer matching 1, 2 or 3
$ int = int (accept: [ 1 , 2 , 3 ]);
$ int ( 2 );
// Integer not-matching 1, 2 or 3
$ int = int (reject: [ 1 , 2 , 3 ]);
$ int ( 4 );
使用IntAttr
屬性定義整數parameter 。
use Chevere parameter Attributes IntAttr ;
#[IntAttr(min: 0 , max: 100 )]
下面的parameter都是基於Int的。
使用函數boolInt
建立符合0
和1
整數的Int parameter
。
use function Chevere parameter boolInt ;
$ bool = boolInt ();
$ bool ( 0 );
$ bool ( 1 );
使用函數float
建立一個Float parameter
。傳遞浮點數範圍的min
和max
, accept
接受浮點數的列表, reject
拒絕浮點數的列表。
use function Chevere parameter float ;
// Any float
$ float = float ();
$ float ( 1.5 );
// Float between 0 and 100
$ float = float (min: 0 , max: 100 );
$ float ( 50.5 );
// Float matching 1.5, 2.5 or 3.5
$ float = float (accept: [ 1.5 , 2.5 , 3.5 ]);
$ float ( 2.5 );
// Float not-matching 1.5, 2.5 or 3.5
$ float = float (reject: [ 1.5 , 2.5 , 3.5 ]);
$ float ( 4.5 );
使用FloatAttr
屬性定義浮點parameter 。
use Chevere parameter Attributes FloatAttr ;
#[FloatAttr(min: 0 , max: 100 )]
使用函數bool
建立Bool parameter
。
use function Chevere parameter bool ;
$ bool = bool ();
$ bool ( true );
$ bool ( false );
使用BoolAttr
屬性定義 bool parameter 。
use Chevere parameter Attributes BoolAttr ;
#[BoolAttr]
使用函數null
建立一個Null parameter
。
use function Chevere parameter null ;
$ null = null ();
$ null ( null );
使用NullAttr
屬性定義空parameter 。
use Chevere parameter Attributes NullAttr ;
#[NullAttr]
使用函數object
建立Object parameter
。傳遞物件類別名稱的 className。
use function Chevere parameter object ;
$ object = object (stdClass::class);
$ object ( new stdClass ());
使用ObjectAttr
屬性定義物件parameter 。
use Chevere parameter Attributes ObjectAttr ;
#[ObjectAttr(stdClass::class)]
使用函數mixed
建立Mixed parameter
。
use function Chevere parameter mixed ;
$ mixed = mixed ();
$ mixed ( 1 );
$ mixed ( ' 1 ' );
$ mixed ( true );
$ mixed ( null );
使用函數union
建立Union parameter
。傳遞一系列要匹配的parameter ,目標值必須至少匹配一個。
use function Chevere parameter union ;
// Any string or null
$ union = union ( string (), null());
$ union ( ' abc ' );
$ union ( null );
// Any digit string or any integer
$ union = union (
intString (),
integer ()
);
$ union ( ' 100 ' );
$ union ( 100 );
類型array
的parameter被處理為複合parameter保存其每個成員的parameter定義。
使用函數arrayp
為命名參數建立Array parameter
作為所需的陣列鍵。
use function Chevere parameter arrayp ;
// Empty array
$ array = arrayp ();
$ array ([]);
// Required 'a' => <string>
$ array = arrayp (a: string ());
$ array ([ ' a ' => ' Hello world ' ]);
parameter支援任意深度的巢狀數組:
use function Chevere parameter arrayp ;
use function Chevere parameter float ;
use function Chevere parameter int ;
$ array = arrayp (
id: int (min: 0 ),
items: arrayp (
id: int (min: 0 ),
price: float (min: 0 ),
),
);
$ array ([
' id ' => 1 ,
' items ' => [
' id ' => 25 ,
' price ' => 16.5 ,
]
]);
使用ArrayAttr
屬性定義陣列parameter 。
use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes FloatAttr ;
use Chevere parameter Attributes IntAttr ;
#[ArrayAttr(
id: new IntAttr (),
items: new ArrayAttr (
id: new IntAttr (),
price: new FloatAttr (),
),
)]
使用withRequired
方法來定義所需的parameter 。
$ array = $ array
-> withRequired (
username: string (),
email: string ()
);
使用withOptional
方法來定義可選parameter 。
$ array = $ array
-> withOptional (address: string ());
注意:只有在提供相符的金鑰時,可選parameter才會被驗證。
使用withModify
方法來定義修改parameter 。
$ array = $ array
-> withModify (
username: string ( ' /w+/ ' ),
);
使用withMakeOptional
方法使所需parameter可選。
$ array = $ array
-> withMakeOptional ( ' username ' );
使用withMakeRequired
方法將可選parameter設為必要。
$ array = $ array
-> withMakeRequired ( ' email ' );
使用方法without
刪除parameter s。
$ array = $ array
-> without ( ' a ' );
使用withOptionalMinimum
方法定義可選parameter的最小數量。如果除 1 之外所有parameter都是可選的,則很有用。
$ array = $ array
-> withOptionalMinimum ( 1 );
下面的parameter都是基於Array的。
使用函數arrayString
為字串值建立ArrayString parameter Interface
。它只支援字串parameter 。
use function Chevere parameter arrayString ;
use function Chevere parameter string ;
$ array = arrayString (
test: string (),
);
$ array ([ ' test ' => ' foo ' ]);
使用函數file
建立一個用於檔案上傳的Array parameter
。
use function Chevere parameter file ;
$ array = file ();
$ file = [
' name ' => ' foo.txt ' ,
' type ' => ' text/plain ' ,
' tmp_name ' => ' /tmp/phpYzdqkD ' ,
' error ' => 0 ,
' size ' => 123 ,
];
$ array ( $ file );
預設情況下,它提供$_FILES
形狀的驗證,但您可以定義自己的驗證規則。例如,要驗證名稱和內容:
use function Chevere parameter file ;
$ array = file (
name: string ( ' /^.txt$/ ' ),
contents: string ( ' /wage-/ ' ),
);
$ array (
' name ' => ' wage-2024.txt ' ,
' type ' => ' text/plain ' ,
' tmp_name ' => ' /tmp/phpYzdqkD ' ,
' error ' => 0 ,
' size ' => 27 ,
' contents ' => ' yada yada wage-2024 bla bla ' ,
);
可迭代型Traversable|array
被視為持有鍵和值的通用定義的複合parameter 。 parameter能夠描述共享相同形狀的項目的集合。
使用函數iterable
建立一個Iterable parameter
。傳遞通用鍵和值的V
和K
parameter 。
use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ iterable = iterable ( int (min: 0 ));
$ iterable ([ 0 , 1 , 2 , 3 ]);
它也適用於命名鍵:
use function Chevere parameter int ;
use function Chevere parameter iterable ;
use function Chevere parameter string ;
$ iterable = iterable (
V: arrayp (
id: int (min: 0 ),
name: string ( ' ^[w]{1,255} ' ),
)
K: string (),
);
$ iterable ([
' based ' => [
' id ' => 1 ,
' name ' => ' OscarGangas '
],
' fome ' => [
' id ' => 2 ,
' name ' => ' BomboFica '
],
]);
使用函數parameter s
建立parameter s
實例。
use function Chevere parameter s parameter s ;
use function Chevere parameter s string ;
$ parameter s = parameter s (foo: string ());
使用函數arguments
建立Arguments
實例。
use function Chevere parameter s arguments ;
use function Chevere parameter s string ;
$ arguments = arguments ( $ parameter s , [ ' foo ' => ' bar ' ]);
使用函數assertNamedArgument
斷言命名參數。
use function Chevere parameter s assertNamedArgument ;
use function Chevere parameter s int ;
use function Chevere parameter s parameter s ;
$ parameter = int (min: 10 );
assertNamedArgument (
name: ' foo ' ,
parameter : $ parameter ,
argument: 20
);
使用函數to parameter
從類型字串建立parameter Interface
介面實例。在下面的範例中,產生的$ parameter
將是Int parameter
。
use function Chevere parameter s to parameter ;
$ parameter = to parameter ( ' int ' );
使用函數arrayFrom
從另一個陣列parameter建立一個陣列parameter 。在下面的範例中,產生的$array
將只包含$source
中定義的name
和id
鍵。
use function Chevere parameter s arrayFrom ;
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
$ source = arrayp (
id: int (),
name: string (),
email: string (),
age: int (),
);
$ array = arrayFrom ( $ source , ' name ' , ' id ' );
使用函數takeKeys
從parameter中擷取包含鍵的陣列。在下面的範例中, $keys
將包含id
和size
。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s takeKeys ;
$ array = arrayp (
id: int (),
size: int (),
);
$ keys = takeKeys ( $ array );
使用函數takeFrom
從parameter中檢索具有所需鍵的迭代器。在下面的範例中, $iterator
將產生size
和name
鍵。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
use function Chevere parameter s takeFrom ;
$ array = arrayp (
id: int (min: 0 ),
size: int (min: 100 ),
name: string (),
);
$ iterator = takeFrom ( $ array , ' size ' , ' name ' );
使用函數parameter sFrom
從parameter建立具有所需鍵的parameter s
。在下面的範例中, $ parameter s
將包含size
和name
鍵。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
use function Chevere parameter s parameter sFrom ;
$ array = arrayp (
id: int (min: 0 ),
size: int (min: 100 ),
name: string (),
);
$ parameter s = parameter sFrom ( $ array , ' size ' , ' name ' );
使用函數get parameter s
從實作parameter AccessInterface
或parameter sInterface
物件中檢索parameter s
實例。
use function Chevere parameter s get parameter s ;
$ parameter s = get parameter s ( $ object );
使用函數getType
檢索該庫已知的類型。
use function Chevere parameter s getType ;
$ type = getType ( 1 ); // int
使用函數parameter Attr
從函數或類別方法parameter中檢索實作parameter AttributeInterface
的物件。
use function Chevere parameter s parameter Attr ;
use Chevere parameter Attributes StringAttr ;
function myFunction (
#[StringAttr( ' /^bin-[d]+$/ ' )]
string $ foo
): void {
// ...
}
$ stringAttr = parameter Attr ( ' foo ' , ' myFunction ' );
$ stringAttr ( ' bin-123 ' );
使用函數reflectionTo parameter s
從ReflectionFunction
或ReflectionMethod
實例檢索parameter s
實例。
use function Chevere parameter reflectionTo parameter s ;
$ parameter s = reflectionTo parameter s ( $ reflection );
使用函數reflectionToReturn
從ReflectionFunction
或ReflectionMethod
實例檢索parameter Interface
實例。
use function Chevere parameter reflectionToReturn ;
$ parameter = reflectionToReturn ( $ reflection );
使用函數reflected parameter Attribute
從Reflection parameter
實例中擷取實作parameter AttributeInterface
的物件。
use function Chevere parameter reflected parameter Attribute ;
$ parameter Attribute = reflected parameter Attribute ( $ reflection parameter );
使用函數validated
來驗證函數或方法參數。
use function Chevere parameter validated ;
$ result = validated ( ' myFunction ' , $ arg1 , $ arg2 ,);
use function Chevere parameter string ;
$ value = ' ahhh ' ;
string ( ' /^a.+/ ' )( $ value );
100
的 int : use function Chevere parameter int ;
$ value = 100 ;
int (min: 100 )( $ value );
use function Chevere parameter int ;
$ value = 1 ;
int (accept: [ 1 , 2 , 3 ])( $ value );
use function Chevere parameter float ;
$ value = 3.1 ;
float (reject: [ 1.1 , 2.1 ])( $ value );
use function Chevere parameter arrayp ;
use function Chevere parameter int ;
use function Chevere parameter string ;
$ value = [
' id ' => 1 ,
' name ' => ' Pepe '
];
arrayp (
id: int (min: 1 ),
name: string ( ' /^[A-Z]{1}w+$/ ' )
)( $ value );
int
列表: use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ value = [ 1 , 2 , 3 ];
iterable ( int ())( $ value );
use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ value = [
' unila ' => 1 ,
' dorila ' => 2 ,
' tirifila ' => 3 ,
];
iterable (
K: string ( ' /ila$/ ' ),
V: int (min: 1 )
)( $ value );
use function Chevere parameter int ;
use function Chevere parameter null ;
$ value = 1 ;
union ( int (), null())( $ value );
validated()
來取得針對所有規則進行驗證的回傳值。 use function Chevere parameter validated ;
$ result = validated ( ' myFunction ' , $ var );
reflectionTo parameter s()
取得驗證參數的規則。 use ReflectionMethod ;
use Chevere parameter Attributes IntAttr ;
use function Chevere parameter arguments ;
use function Chevere parameter reflectionTo parameter s ;
$ class = new class () {
public function wea (
#[IntAttr(accept: [ 1 , 10 , 100 ])]
int $ base
): void {
}
};
$ object = new $ class ();
$ reflection = new ReflectionMethod ( $ object , ' wea ' );
$ parameter s = reflectionTo parameter s ( $ reflection );
$ args = [ ' base ' => 10 ];
$ parameter s (... $ args ); // valid $args
$ result = $ object -> wea (... $ args );
reflectionToReturn()
取得驗證函數/方法傳回值的規則: use ReflectionFunction ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter reflectionToReturn ;
$ function =
#[ReturnAttr(
new IntAttr (min: 1000 )
)]
function ( int $ base ): int {
return 10 * $ base ;
};
$ reflection = new ReflectionFunction ( $ function );
$ return = reflectionToReturn ( $ reflection );
$ base = 10 ;
$ result = $ function ( $ base );
$ result = $ return ( $ result ); // Validates result
在函數/方法主體上使用valid()
來觸發參數驗證。
Hugo
、 Paco
、 Luis
的字串枚舉:1000
: use Chevere parameter Attributes EnumAttr ;
use function Chevere parameter validate ;
function myEnum (
#[EnumAttr( ' Hugo ' , ' Paco ' , ' Luis ' )]
string $ name ,
#[FloatAttr(min: 1000 )]
float $ money
): void
{
valid ();
// Or single...
valid ( ' name ' );
valid ( ' money ' );
}
$ arg1 = ' Paco ' ;
$ arg2 = 1000.50 ;
myEnum ( $ arg1 , $ arg2 );
0
和100
以外的任何值的 int : use Chevere parameter Attributes IntAttr ;
use function Chevere parameter validate ;
function myInt (
#[IntAttr(reject: [ 0 , 100 ])]
int $ id
): void
{
valid ();
}
$ value = 50 ;
myInt ( $ value );
use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes StringAttr ;
use Chevere parameter Attributes IterableAttr ;
use function Chevere parameter validate ;
function myArray (
#[ArrayAttr(
id: new IntAttr (min: 1 ),
role: new ArrayAttr (
mask: new IntAttr (accept: [ 64 , 128 , 256 ]),
name: new StringAttr ( ' /[a-z]+/ ' ),
tenants: new IterableAttr (
new IntAttr (min: 1 )
)
),
)]
array $ spooky
): void
{
valid ();
}
$ value = [
' id ' => 10 ,
' role ' => [
' mask ' => 128 ,
' name ' => ' admin ' ,
' tenants ' => [ 1 , 2 , 3 , 4 , 5 ]
],
];
myArray ( $ value );
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes IterableAttr ;
use function Chevere parameter validate ;
function myIterable (
#[IterableAttr(
new IntAttr (),
)]
array $ list = [ 0 , 1 , 2 ]
): void
{
valid ();
}
在函數/方法主體上使用函數returnAttr()
。
min: 0, max: 5
回傳: use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new IntAttr (min: 0 , max: 5 )
)]
public function myReturnInt (): int
{
$ result = 1 ;
return returnAttr ()( $ result );
}
use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes StringAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new ArrayAttr (
id: new IntAttr (min: 0 ),
name: new StringAttr ()
)
)]
public function myReturnArray (): array
{
$ result = [
' id ' => 1 ,
' name ' => ' Peoples Hernandez '
];
return returnAttr ()( $ result );
}
依照約定,當省略ReturnAttr
時,方法public static function return(): parameter Interface
(如果有)將用於確定返回驗證規則。
文件可在 chevere.org 上取得。
版權所有魯道夫·貝裡奧斯 A.
Chevere 根據 Apache 授權 2.0 版授權。請參閱許可證以取得完整的許可證文字。
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。