- Verificación de entorno XAMPP (PHP 8.0.30, Composer 2.9.1, WP-CLI 2.12.0) - Configuración de Composer con PSR-4 para 24 namespaces - Configuración de PHPUnit con 140 tests preparados - Configuración de PHPCS con WordPress Coding Standards - Scripts de backup y rollback con mejoras de seguridad - Estructura de contextos (admin/, public/, shared/) - Schemas JSON para 11 componentes del sistema - Código fuente inicial con arquitectura limpia en src/ - Documentación de procedimientos de emergencia 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
99 lines
2.7 KiB
PHP
99 lines
2.7 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace ROITheme\Component\Domain\Exceptions;
|
|
|
|
/**
|
|
* InvalidComponentException - Excepción de Dominio para componentes inválidos
|
|
*
|
|
* RESPONSABILIDAD: Representar errores de validación de reglas de negocio de componentes
|
|
*
|
|
* CUÁNDO LANZAR:
|
|
* - Nombre de componente inválido (formato, longitud)
|
|
* - Configuración inválida (CTA URL sin CTA text, colores mal formateados)
|
|
* - Visibility inválida (combinaciones no permitidas)
|
|
* - Content inválido (URLs mal formateadas, textos vacíos cuando requeridos)
|
|
* - Cualquier violación de invariantes del dominio
|
|
*
|
|
* USO:
|
|
* ```php
|
|
* if (empty($name)) {
|
|
* throw new InvalidComponentException('Component name cannot be empty');
|
|
* }
|
|
* ```
|
|
*
|
|
* @package ROITheme\Domain\Component\Exceptions
|
|
*/
|
|
class InvalidComponentException extends \DomainException
|
|
{
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param string $message Mensaje de error
|
|
* @param int $code Código de error (opcional)
|
|
* @param \Throwable|null $previous Excepción anterior (opcional)
|
|
*/
|
|
public function __construct(
|
|
string $message,
|
|
int $code = 0,
|
|
?\Throwable $previous = null
|
|
) {
|
|
parent::__construct($message, $code, $previous);
|
|
}
|
|
|
|
/**
|
|
* Crear excepción para nombre inválido
|
|
*
|
|
* @param string $name
|
|
* @param string $reason
|
|
* @return self
|
|
*/
|
|
public static function invalidName(string $name, string $reason): self
|
|
{
|
|
return new self(
|
|
sprintf('Invalid component name "%s": %s', $name, $reason)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Crear excepción para configuración inválida
|
|
*
|
|
* @param string $componentName
|
|
* @param string $reason
|
|
* @return self
|
|
*/
|
|
public static function invalidConfiguration(string $componentName, string $reason): self
|
|
{
|
|
return new self(
|
|
sprintf('Invalid configuration for component "%s": %s', $componentName, $reason)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Crear excepción para CTA inválido
|
|
*
|
|
* @param string $componentName
|
|
* @return self
|
|
*/
|
|
public static function ctaUrlRequiresText(string $componentName): self
|
|
{
|
|
return new self(
|
|
sprintf('Component "%s" has CTA URL but missing CTA text', $componentName)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Crear excepción para color inválido
|
|
*
|
|
* @param string $colorKey
|
|
* @param string $value
|
|
* @return self
|
|
*/
|
|
public static function invalidColor(string $colorKey, string $value): self
|
|
{
|
|
return new self(
|
|
sprintf('Invalid color format for "%s": "%s". Expected hexadecimal (e.g., #000000)', $colorKey, $value)
|
|
);
|
|
}
|
|
}
|