Laravel-codicefiscale是一套意大利CodiceFiscale
(即稅法)的軟件包。該軟件包允許輕鬆驗證和解析CodiceIceFiscale。它也適用於Laravel,因為它為請求驗證提供了方便的自定義驗證器。
拉拉維爾 | 包裹 |
---|---|
11.x | 2.x |
10.x | 1.x |
9.x | 1.x |
8.x | 1.x |
7.x | 1.x |
6.x | 1.x |
重要更新:現在,您可以使用非默認
IstatRemoteCSVList
City Dododer從ISTAT動態加載城市代碼。
運行以下命令以安裝軟件包的最新適用版本:
composer require robertogallea/laravel-codicefiscale:^2
在您的應用程序配置中,將服務提供商添加到$providers
數組(僅適用於Laravel 5.4或以下) :
' providers ' => [
...
robertogallea LaravelCodiceFiscale CodiceFiscaleServiceProvider ::class,
],
驗證錯誤消息將以it
和en
語言翻譯,如果要添加新語言,請給我發送PR。
在bootstrap/app.php
中,註冊服務提供商
$ app -> register (robertogallea LaravelCodiceFiscale CodiceFiscaleServiceProvider ::class);
要自定義軟件包配置,您必須將配置文件導出到config/codicefiscale.php
中。
這可以通過啟動以下命令來實現:
php artisan vendor:publish --provider="robertogalleaLaravelCodiceFiscaleCodiceFiscaleServiceProvider" --tag="config"
您可以配置以下參數:
city-decoder
:用於解碼城市代碼的課程(請參閱城市代碼解析),默認為InternationalCitiesStaticList
。date-format
:用於解析生日的日期格式,默認為'Ym-d'
。labels
:用於male
和female
的標籤,默認為'M'
和'F'
。 您可以使用此命令自定義發布驗證翻譯的驗證消息:
php artisan vendor:publish --provider="robertogalleaLaravelCodiceFiscaleCodiceFiscaleServiceProvider" --tag="lang"
要驗證Codice Fiscale,請在驗證規則數組中使用codice_fiscale
關鍵字
public function rules ()
{
return [
' codicefiscale ' => ' codice_fiscale ' ,
//...
];
}
從1.9.0版本,您可以針對其他表單字段驗證Codice Fiscale,以檢查是否有匹配項。
您必須指定所有必需的字段:
first_name
last_name
birthdate
place
gender
給出codice_fiscale
規則的參數。
例如:
public function rules ()
{
return [
' codicefiscale ' => ' codice_fiscale:first_name=first_name_field,last_name=last_name_field,birthdate=birthdate_field,place=place_field,gender=gender_field ' ,
' first_name_field ' => ' required|string ' ,
' last_name_field ' => ' required|string ' ,
' birthdate_field ' => ' required|date ' ,
' place_field ' => ' required|string ' ,
' gender_field ' => ' required|string|max:1 ' ,
//...
];
}
如果提供的codiceIteFiscale和從輸入字段生成的驗證案例不匹配,則驗證會失敗。
可以將Codice Fiscale包裹在robertogalleaLaravelCodiceFiscaleCodiceFiscale
類中,以通過有用的效用方法來增強它。
use robertogallea LaravelCodiceFiscale CodiceFiscale ;
. . .
try {
$ cf = new CodiceFiscale ();
$ result = $ cf -> parse ( ' RSSMRA95E05F205Z ' );
var_dump ( $ result );
} catch ( Exception $ exception ) {
echo $ exception ;
}
如果有效的CodiceIceFiscale會產生以下結果:
[
" gender " => " M "
"birth_place" => " F205 "
"birth_place_complete" => " Milano " ,
" day " => " 05 "
"month" => " 05 "
"year" => " 1995 "
"birthdate" => Carbon @ 799632000 {
date: 1995 - 05 - 05 00 : 00 : 00.0 UTC (+ 00 : 00 )
}
]
如果發生錯誤, CodiceFiscale::parse()
拋出了一個CodiceFiscaleValidationException
返回了一個定義的常數之一,則具有$exception->getCode()
:
CodiceFiscaleException::NO_ERROR
CodiceFiscaleException::NO_CODE
CodiceFiscaleException::WRONG_SIZE
CodiceFiscaleException::BAD_CHARACTERS
CodiceFiscaleException::BAD_OMOCODIA_CHAR
CodiceFiscaleException::WRONG_CODE
CodiceFiscaleException::MISSING_CITY_CODE
如果您不想捕獲異常,則可以使用CodiceFiscale::tryParse()
:
use robertogallea LaravelCodiceFiscale CodiceFiscale ;
. . .
$ cf = new CodiceFiscale ();
$ result = $ cf -> tryParse ( ' RSSMRA95E05F205Z ' );
if ( $ result ) {
var_dump ( $ cf -> asArray ());
} else {
echo $ cf -> getError ();
}
返回與上面相同的值,您可以使用$cf->isValid()
檢查codiceIceFiscale是否有效,並且$cf->getError()
以獲取錯誤。這在刀片模板中特別有用:
@ php ( $ cf = new robertogallea LaravelCodiceFiscale CodiceFiscale ())
@ if ( $ cf -> tryParse ( $ codicefiscale ))
<p><i class="fa fa-check" style="color:green"></i>{{ $ cf -> getCodiceFiscale ()}}</p>
@else
<p><i class="fa fa-check" style="color:red"></i>{{ $ cf -> getError ()-> getMessage ()}}</p>
@endif
類CodiceFiscale
可用於從輸入值中生成Codice Fiscale Fiscale字符串:
$ first_name = ' Mario ' ;
$ last_name = ' Rossi ' ;
$ birth_date = ' 1995-05-05 ' ; // or Carbon::parse('1995-05-05')
$ birth_place = ' F205 ' ; // or 'Milano'
$ gender = ' M ' ;
$ cf_string = CodiceFiscale :: generate ( $ first_name , $ last_name , $ birth_date , $ birth_place , $ gender );
您可以使用提供的Faker擴展名來在工廠中生成假的Codice Fiscale:
class PersonFactory extends Factory
{
public function definition (): array
{
return [
' first_name ' => $ firstName = fake ()-> firstName (),
' last_name ' => $ lastName = fake ()-> lastName (),
' fiscal_number ' => fake ()-> codiceFiscale (firstName: $ firstName , lastName: $ lastName ),
];
}
注意:您可以提供一些生成Codice Fiscale所需的全部或無信息( firstName
, lastName
, birthDate
, birthPlace
, gender
)
有三種解碼城市法規的策略:
InternationalCitiesStaticList
:意大利城市的靜態清單;ItalianCitiesStaticList
:國際城市的靜態清單;IstatRemoteCSVList
:從官方ISTAT CSV文件中加載的意大利城市列表的動態(從Web加載)。請注意,該列表是緩存的(默認情況下有一天,請參見“要更改”的配置)。CompositeCitiesList
:使用配置鍵codicefiscale.cities-decoder-list
中的基本CityDecoderInterface
合併兩個CityDecoderInterface
類(例如IstatRemoteCSVList
和InternationalCitiesStaticList
)的結果。默認情況下,該軟件包使用InternationalCitiesStaticList
類從代碼和Viceversa查找城市。但是,您可以使用自己的班級來改變所使用的策略。
您只需要實現CityDecoderInterface
及其getList()
方法即可。然後,要使用它,只需將一個實例傳遞到CodiceFiscale
類。
例如:
class MyCityList implements CityDecoderInterface
{
public function getList ()
{
// Implementation
}
}
. . .
$ cf = new CodiceFiscale ( new MyCityList )
. . .
注意:如果您發現缺失城市,請進行公關!
如果要集成城市列表,則可以通過合併所提供的解碼器和自定義解碼器的結果來使用CompositeCitiesList
。
例如:
// conf/codicefiscale.php
return [
'city-decoder' => 'robertogalleaLaravelCodiceFiscaleCityCodeDecodersCompositeCitiesList',
...
'cities-decoder-list' => [
'robertogalleaLaravelCodiceFiscaleCityCodeDecodersInternationalCitiesStaticList',
'YourNamespaceMyCustomList',
]
MyCustomList
被定義為:
...
class MyCustomList implements CityDecoderInterface
{
public function getList()
{
return [
'XYZ1' => 'My city 1',
'XYZ2' => 'My city 2',
]
}
}