Primero, el concepto tras un Widget, no solo en Yii Framework, sino en cualquier plataforma.
Un widget debe ser capaz de comunicarse con su controller y su action (o actions), debe ser capaz de lidiar con sus propios archivos JS y CSS (usando los assets), debe ser capaz de realizar el funcionamiento jQuery necesario (o javascript plano o lo que sea), ocultando a su usuario (y programador) la complejidad tras éste, aplicando el concepto de Encapsulamiento y Reutilización de la Programación Orientada a Objetos. Un Widget ayuda a la "componentización" de tu sistema, delegando en estos funciones bien aisladas y reutilizables.Repositorio con el Material del Widget:
https://bitbucket.org/christiansalazarh/ejemplowidget/overview
El Widget presentará un formulario simple que tras hacerle submit enviará los datos via ajax:
Aqui lo importante a destacar es: "El Concepto de Encapsulamiento de la POO", bajo el cual un objeto (el widget en este caso) DEBE ocultar la complejidad tras si para que quien lo use no deba lidiar cada vez con detalles que no vienen al caso de negocio.
No es en lo "precioso" que se ve...sino lo funcional, este widget de ejemplo le oculta al programador la necesidad de tener que construir cada vez un formulario para "reutilizarlo" en varias partes de su sistema.
Hay casos en donde una misma pieza de código siempre se debe "reutilizar" en un sistema o en varios (concepto de reutilización de la OOP) he aquí la necesidad del widget.
Es erróneo pensar que: Un widget es un adorno para presentar un bonito componente de UI. Es un error pensar así. Un widget es una pieza reutilizable de código,
por ejemplo:
Si te piden un sistema de comunicaciones en donde por todos lados es requerido presentar un mismo formulario complejo que pide y actualiza datos del cliente, pues bien, no vas a programar 10 veces el mismo formulario...sino los bugs te van a comer el proyecto, en cambio, haces un widget y lo reutilizas, además de ordenar tu proyecto puedes dedicar a una persona a realizar y mantener el widget, ayudando a la "componentización" (es un nuevo término que se usa en el diseño de sistemas, no es un invento mío).