Flujo del controller del ui component adminthml

Una url está compuesta de diferentes partes. Vamos a mirar el siguiente ejemplo.

    https://wwww.chenhanhan.com:443/blog/articulo/busqueda?tema=magento&idioma=es#primer_parrafo
  • schema o protocol: https://
  • subdomain: wwww
  • domain o hostname: chenhanhan.com
  • Port: 443
  • path: blog/articulo/busqueda
  • query string separator: ?
  • query string parameter: tema=magento&idioma=es
  • fragment o hash: #primer_parrafo
Agrupando elementos:
  • host: chenhanhan:443
  • origen: https://www.chenhanhan.com:443
  • href: toda la url

En Magento nos interesa la parte del path y parámetros.

    https://wwww.chenhanhan.com/admin/sales_rule/promo_quote/index/key/c34aa11ad76fde0/
  • url del bacoffice definido en env.php o en la bbdd: admin
  • frontname definido en adminhtml/routes.xml: sales_rule
  • controllernamename: promo_quote: -->significa carpeta promo/quote en la carpeta controller
  • Action name : index
  • parámetros de búsqueda: key/c34aa11ad76fde0 --> equivalente a ?key=c34aa11ad76fde0

La ruta está asociada a un layout. En este caso es sales_rule_promo_quote_index.xml donde sales_rule es el identificador del frontname definido en el fichero routes.xml y promo_quote_index son el controlle name y el action name.

El layout está asociado a un ui-component. En este caso es sales_rule_form.xml. Este fichero puede ser de 2 tipos: listing o form. En este caso es listing.

El módulo que recoge los datos del xml y los procesa es el module-ui de Magento. Por ejemplo: la clase Magento\Ui\Component\Form\Field . Esta clase recoge todos las columnas y sus atributos (configs) del grid definidas en el fichero xml.

En la preparación de los datos, se crea el objeto component con el método Magento\Framework\View|\Element\UiComponentFactory::create. Hay un detalle importantes, $componentData->$config->get($identifier). Esta línea de código recupera los datos del fullpage caché. invocando al método Magento\Ui\Config::initData . Este método recupera el caché si es que ahy o sino hay, crea el caché. Después de preparar todos los datos, se devuelve todo el contenido y lo vuelca en el html. Este método es TemplateEngine\Xhtml\Result::wrapContent .

Última nota: los ficheros xml con el mismo nombre se mergean entre sí. dando prioridad siempre a los valores del último. Por si algo no cuadra, es porque hay reescritura.

Referencias:

        var ko = require('knockout')
        var context = ko.contextFor($0) // el $0 es el elemento seleccionado del inspect
        var field = context.$data 

        // por ejemplo: quiero cambiar un valor de una propiedad del tipo observable
        field.show(true) //si quiero que aparezca un elemento
        field.show(hide) // si quiero que se esconda el elemento
    
        sales_rule_form.sales_rule_form.rule_information.name
        
        sales_rule_form: nombre del fichero
        sales_fule_form: nombre de la instancia xml 
        rule_information: fieldset 
        name: field