Boa tarde!
Escrevi um comando no Laravel para utilizar pelo php artisan
, contudo, mesmo tratando a exceção com try catch
, ele para a execução no primeiro lançamento de exceção que encontra. Porque isso acontece?Classe Person.php:
<?php
namespace Domain\Person;
use DomainException;
use Domain\Phone;
use LaravelLegends\PtBrValidator\Rules\Cpf;
use LaravelLegends\PtBrValidator\Rules\Cnpj;
class Person
{
private string $name;
private string $document;
private string $personNature;
private string $status;
private array $phones = [];
public function __construct(
string $name,
string $document,
string $phones,
string $personNature,
string $status
)
{
$this->setName($name);
$this->setPersonNature($personNature);
$this->setDocument($document);
$this->setPhones($phones);
$this->setStatus($status);
}
public function setStatus($status): void
{
$this->status = $status;
}
public function getStatus(): string
{
return $this->status;
}
public function setPersonNature(string $personNature): void
{
if (($personNature <> 'F') and ($personNature <> 'J')) {
throw new DomainException('Natureza da pessoa inválida');
}
$this->personNature = $personNature;
}
public function setDocument(string $document): void
{
$cpfValidator = new Cpf();
$cnpjValidator = new Cnpj();
if (strlen($document) == 0) throw new DomainException("Sem número do CNPJ/CPF.");
if ($this->personNature = 'F') {
$document = str_pad($document, 11, '0', STR_PAD_LEFT);
if (!$cpfValidator->passes('', $document)) throw new DomainException("Documento $document inválido");
} else {
$document = str_pad($document, 14, '0', STR_PAD_LEFT);
if (!$cnpjValidator->passes('', $document)) throw new DomainException("Documento $document inválido");
}
$this->document = $document;
}
public function setName(string $name): void
{
if (str_word_count($name) < 2) throw new DomainException("Nome do cliente incompleto: $name");
$this->name = ucwords(strtolower($name));
}
public function setPhones(string $phones): void
{
$phonesArray = explode(',', $phones);
foreach ($phonesArray as $phoneNumber) {
$phoneNumber = preg_replace('/[^0-9]/', '', $phones);
try {
array_push($this->phones, new Phone($phoneNumber));
} finally {
}
}
}
public function getPhones(): array
{
return $this->phones;
}
public function __toString(): string
{
$strReturn = "Nome: $this->name / ";
$strReturn .= ($this->personNature = 'F') ? "CPF: " : "CNPJ: ";
$strReturn .= $this->document . " / ";
$phones = "Telefones: ";
foreach ($this->phones as $phone) {
$phones .= $phone . " / ";
}
$strReturn .= $phones;
$strReturn .= "Natureza: $this->personNature" . PHP_EOL;
return $strReturn;
}
}
Command:
<?php
namespace App\Console\Commands;
use Domain\Person\Person;
use Illuminate\Console\Command;
class IntegratePeople extends Command
{
protected string $signature = 'app:integrate-people';
protected string $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$this->info("Integrando pessoas...");
$csvFile = '/var/www/DadosClientes.csv';
if (($handle = fopen($csvFile, 'r')) !== FALSE) {
$qtyRegisters = 0;
$qtyRegistersValids = 0;
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
if ($data[0] != 'Código') {
try {
$person = new Person($data[1], $data[3], $data[18], $data[4], $data[7]);
if ($person->getStatus() == 'Ativo') $qtyRegistersValids++;
} catch (Exception $e) {
$this->error($e->getMessage());
}
$qtyRegisters++;
}
}
// Fecha o arquivo
$this->info("Total de registros: $qtyRegisters / Válidos: $qtyRegistersValids");
fclose($handle);
} else {
$this->error("Não foi possível abrir o arquivo CSV.");
}
}
}
Obrigado.