Novità in Symfony 8.2: constraint EntityExists, Cron e Audio (Symfony Blog)
Il componente Validator di Symfony fornisce oltre 80 constraint integrati per validare ogni tipo di dato. Symfony 8.2 aggiunge tre nuovi constraint per alcune esigenze comuni che in precedenza richiedevano codice di validazione personalizzato.
Quando la tua applicazione riceve identificatori di entità nei DTO (ad esempio da una richiesta API o da un form), di solito devi ripetere la stessa logica: cercare l'entità, verificare se esiste e lanciare un errore in caso contrario. Il nuovo constraint EntityExists gestisce questo controllo e segnala un'entità mancante come violazione di validazione sulla proprietà:
Per impostazione predefinita, il valore viene cercato tramite l'identificatore dell'entità. Puoi anche usare l'opzione repositoryMethod per chiamare un tuo metodo del repository; qualsiasi risultato truthy (un'entità, un conteggio, true, ecc.) significa che l'entità esiste.
Come la maggior parte dei constraint, null e le stringhe vuote sono considerati validi, quindi combinalo con NotBlank quando il valore è obbligatorio.
Se la tua applicazione consente agli utenti di definire pianificazioni, un'espressione regolare che controlla solo il formato può non rilevare valori non validi come 60 * * * * o */0 * * * *. Il nuovo constraint Cron valida le espressioni cron usando un parser dedicato:
La modalità MODE_HASHED accetta anche espressioni cron con hash come # # * * * e alias come #daily, che il componente Scheduler usa per distribuire le attività ricorrenti nel tempo. Questo constraint richiede il pacchetto dragonmantank/cron-expression, lo stesso usato dal componente Scheduler per i trigger cron.
Symfony 7.4 ha aggiunto un constraint Video per validare i file video. Symfony 8.2 aggiunge la sua controparte audio, il constraint Audio, che valida i file audio in base alle loro caratteristiche effettive (durata, bitrate, sample rate, numero di canali, codec e container) e non solo al loro tipo MIME e alla dimensione:
Il constraint Audio estende il constraint File, quindi tutte le sue opzioni sono disponibili. La sua opzione mimeTypes ha come valore predefinito audio/* e, a differenza del constraint Video, non limita codec o container a meno che tu non imposti le opzioni allowedCodecs e allowedContainers. Quando configuri uno qualsiasi dei controlli specifici per l'audio, utilizza il componente Process e il binario ffprobe di FFmpeg per ispezionare il file.
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.