Closed marco987 closed 3 years ago
Salve Marco, Credo che tu lo stia utilizzando nel modo sbagliato. Fra l'altro mi sembra che tu stia modificando i sorgenti, cosa che non andrebbe fatta.
Puoi provare nel seguente modo:
// config/codicefiscale.php
return [
'city-decoder' => '\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\CompositeCitiesList',
// The following parameters are used when using IstatRemoveCSVList city decoder class
// The url where the CSV provided by ISTAT is served (should never change)
'istat-csv-url' => env('CF_ISTAT_CSV_URL', 'https://www.istat.it/storage/codici-unita-amministrative/Elenco-comuni-italiani.csv'),
// Cache duration (in seconds) for storing the list downloaded from the CSV
'cache-duration' => env('CF_CACHE_DURATION', 60 * 60 * 24),
// When using CompositeCitiesList, you may specify the CityDecoders to merge the results from
'cities-decoder-list' => [
'\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\ISTATRemoteCSVList',
'\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\InternationalCitiesStaticList',
],
];
e poi dove vuoi utilizzare la classe, es: controller:
$cf = new robertogallea\LaravelCodiceFiscale\CodiceFiscale(new robertogallea\LaravelCodiceFiscale\CityCodeDecoders\CompositeCitiesList());
$result = $cf->parse('UnCodiceFiscaleCorretto');
print_r($cf->getError());
print_r($result);
Grazie per la risposta Roberto. Ho ripristinato i file sorgente. Il problema rimane. Ecco cosa mi stampa con dd($cf);
:
robertogallea\LaravelCodiceFiscale\CodiceFiscale {#1305 ▼
#cityDecoder: robertogallea\LaravelCodiceFiscale\CityCodeDecoders\CompositeCitiesList {#5873}
-cf: null
-isValid: null
-gender: null
-birthPlace: null
-day: null
-month: null
-year: null
-error: null
-tabDecodeOmocodia: array:26 [▶]
-tabReplacementOmocodia: array:7 [▶]
-tabDecodeMonths: array:12 [▶]
-checks: array:5 [▶]
}
E mi sembra corretto fin qui, mi sembra correttamente istanziata la classe. Ma dd($result);
mi restituisce pagina bianca...
$result
dovrebbe contenere le informazioni spezzate del cf.
Dentro il controller puoi anche usare il service container ed in questo modo semplificare, dato che non devi costruire gli oggetti (occhio che in questo caso il decoder lo prende da configurazione):
Route::get('/', function (\robertogallea\LaravelCodiceFiscale\CodiceFiscale $cf) {
try {
$result = $cf->parse('UnCodiceFiscaleCorretto');
dd($result);
} catch (\robertogallea\LaravelCodiceFiscale\Exceptions\CodiceFiscaleValidationException $exception) {
dd($exception);
}
});
Prova questo snippet e fammi sapere.
Niente, pagina bianca. PS. Sto usando Laravel 8, c'è qualche incompatibilità?
No, nessuna incompatibilità. Anche io ho provato su un progetto nuovo con L8. Prova a fare queste verifiche:
Quando in config\codicefiscale.php
metto il seguente decoder
'city-decoder' => '\robertogallea\LaravelCodiceFiscale\CityCodeDecoders\InternationalCitiesStaticList',
funziona tutto perfettamente!
Niente da segnalare nei log. Io già uso questo pacchetto in altri miei progetti, ma senza il decoder CompositeCitiesList
... Temo che il problema nasca da lì
ed invece che mi dici di \robertogallea\LaravelCodiceFiscale\CityCodeDecoders\ISTATRemoteCSVList
? Lo hai provato a solo? Essendo che usa chiamate http, il file system (per salvarae il file csv temporaneo) e la cache, può darsi che sulla tua macchina ci siano problemi legati a questi tre elementi?
Se vuoi condividimi il progetto o un progetto di base in cui replichi il problema.
ISTATRemoteCSVList
da solo non funziona, mi correggo.
Provo a impostare il salvataggio del csv ogni secondo, tanto per fare un test.
Infatti come immaginavo il problema sta lì, verifica anche che la cache (su disco o su altro device che usi) funzioni.
P.S. ricordavo male, il file csv non viene salvato su un file temporaneo.
No, niente, nemmeno impostando la cache a 1 secondo.
Prova a condividermi il progetto se ti va, o fai qualche prova su un progetto vuoto.
Se vuoi, giusto per capire se il problema è la cache, modifica il sorgente di ISTATRemoteCSVList
, eliminando la cache:
public static function getList()
{
$client = new Client();
$response = $client->request('GET', config('codicefiscale.istat-csv-url'));
$body = iconv('ISO-8859-1', 'UTF-8', $response->getBody());
$body = self::str_replace_times("\n", '', $body, 2);
$data = self::getCsv($body);
$list = self::csvToList($data);
return $list;
}
E poi, giusto per scrupolo: config('codicefiscale.istat-csv-url')
è valorizzato, giusto?
'istat-csv-url' => env('CF_ISTAT_CSV_URL', 'https://www.istat.it/storage/codici-unita-amministrative/Elenco-comuni-italiani.csv'),
Non ha funzionato: dd($response);
mi dà pagina bianca...
Prova a fare un po' di dump all'interno di quello stesso metodo... Lo farei io, ma non riesco a riprodurre il problema.
dd($client);
GuzzleHttp\Client {#5869 ▼
-config: array:8 [▼
"handler" => GuzzleHttp\HandlerStack {#5872 ▼
-handler: Closure(RequestInterface $request, array $options): PromiseInterface {#5863 ▶}
-stack: array:4 [▶]
-cached: null
}
"allow_redirects" => array:5 [▼
"max" => 5
"protocols" => array:2 [▶]
"strict" => false
"referer" => false
"track_redirects" => false
]
"http_errors" => true
"decode_content" => true
"verify" => true
"cookies" => false
"idn_conversion" => false
"headers" => array:1 [▼
"User-Agent" => "GuzzleHttp/7"
]
]
}
Dopodiché ogni dump è una pagina bianca... Non prosegue lo script proprio. Preciso che con in locale, Wampserver64 su Windows10
Non che è sei in qualche rete con limiti di accesso? Hai provato a scaricare da un browser il file all'indirizzo https://www.istat.it/storage/codici-unita-amministrative/Elenco-comuni-italiani.csv ?
Alla cieca non saprei cos'altro suggerirti...
Il download funziona
Prova a fare anche questo:
composer require guzzlehttp/guzzle
, normalmente viene installato, ma è opzionaleuse Illuminate\Support\Facades\Http;
$response = Http::get('http://google.com');
dd($response->body());
vedi se questa va.
Adesso sì! Funziona tutto 👍
(Avendo server WAMP la risposta l'ho presa qui https://stackoverflow.com/questions/42094842/curl-error-60-ssl-certificate-in-laravel-5-4 )
Grazie Roberto!
Ottimo! Allora chiudo l'issue!
Salve. Sto provando ad utilizzare CompositeCitiesList. In
config\codicefiscale.php
ho configurato in questo modo:Poi in
src\CodiceFiscale.php
ho inseritouse robertogallea\LaravelCodiceFiscale\CityCodeDecoders\CompositeCitiesList;
e nel costruttore ho sostituito questo:con questo:
Quindi nel controller ho:
E mi viene restituita pagina bianca... Dove sbaglio?