Вопрос про "ArgumentCountError"

75
11 января 2022, 21:10

Имеем класс Address с конструктором

 public function __construct(string $country,string $city, string $street, string $house, string $building = '') {}

Я хочу валидировать все части адреса (страну, город, улицу, дом, строение). Это всё удается

 private function isCountryValid($param) {
    if (empty($param) || !preg_match("/^[а-яё0-9- ]+$/iu", $param)) {
        throw new AddressWithoutCountryException($param);
    }
}

и тест удается нормально написать

 public function testAddressCreatedWithoutCountry() {
    $this->expectException(AddressWithoutCountryException::class);
    CreateCompanyBuilder::instance()->withAddress(new Address('', 'Москва', 'Солнечная', '15',''))->build();
}

Но что делать, если я хочу сделать тест без параметров вообще

 public function testCreateCompanyWithoutAddress() {
    $this->expectException(CompanycWithoutAddressException::class);
    CreateCompanyBuilder::instance()->withAddress(new Address())->build();
}

В этом случае логично выдается

Failed asserting that exception of type "ArgumentCountError" matches expected exception ... at least 4 expected

Вопрос номер один - как переопределить ArgumentCountError, (и где) чтобы выдавать исключение вроде

class CompanyWithoutAddressException extends ArgumentCountError {
public function __construct()
{
    parent::__construct('У организации должен быть заполнен адрес');
}

Сейчас всё равно бросается исключение ArgumentCountError даже если сделать так

public function __construct(string $country,string $city, string $street, string $house, string $building = '0') {
    if (!$country && !$city && !$street && !$house) {
        throw new CompanyWithoutAddressException();
    }

И второй вопрос - как лучше сделать передачу параметров в конструктор
string $country,string $city, string $street, string $house, string $building = '' с необязательным параметром $building (строение). Оно может быть, а может не быть. Можно убрать его из конструктора и передавать сеттером, но хотелось бы прям целиком dto засовывать в конструктор.

READ ALSO
Ошибка 400 (Bad request) при работе виджета через AJAX

Ошибка 400 (Bad request) при работе виджета через AJAX

Возможно, тема уже избитая, но всё же

103
Как обратиться к последнему элементу mysqli_fetch_assoc

Как обратиться к последнему элементу mysqli_fetch_assoc

Я хотел бы обратиться к последнему элементу в цикле while, чтобы не добавлять табуляцию в кодеЯ бы мог сделать ещё один запрос к БД(на длину таблицы),...

85
Нужна помощь в php с PHPExcel

Нужна помощь в php с PHPExcel

Есть php код, который получает данные из файла sxlsx используя библиотеку PHPExcel, и выводит их в таблицу для печати ценников с qr-кодами

99
Не находит страницу, которая есть. Symfony

Не находит страницу, которая есть. Symfony

Проект на Symfony, я указываю ссылку на страницу, она лежит в проекте, но сайт протестует и выдает 404 ошибку(ссылка указана правильно)

183