Conceptos para entender Composer

Conceptos de Composer

En youtube y Slack me han preguntado mucho sobre permisos de usuarios, manejar grupos, hacer sistemas real time, laravel y socket, etc... y esto está bien, pero además quiero enseñarte temas como este para que salgas mas temprano que tarde de la zona de PROGRAMADOR ENTUSIASTA (Junior). Así que lee y aprecia estos temas por muy teoríco que parezcan.


En este post hablaremos sobre conceptos detrás de Composer. Realmente que es ¿es un software? ¿qué hace en realidad? y más...

Hay un artículo de menor nivel sobre composer aquí miralo y luego vuelve para continuar :)

¿Listo?

¡GENIAL... Continuemos!

Hablando de Composer ¿has tenido experiencia creando aplicaciones PHP desde cero? o ¿solo lo has usado Composer para instalar Laravel y paquetes?. No importa si solo has trajado con Composer gracias a Laravel, la idea es sincerarnos y así ayudarte mucho a entender bien sobre este mundo.

Cuando creamos un sistema en PHP no queremos reinventar la rueda, muchos problemas ya han sido resueltos como por ejemplo: enviar email, guardar en una base de datos, etc. Ahí es donde Composer es realmente valioso. Al escribir aplicaciones PHP desde "cero", en realidad no empezamos desde cero (y es la idea)... El éxito es gastar nuestro tiempo en el sistema en sí y no en solucionar "cómo enviamos un email" o "cómo guardamos en la base de datos".

Puede sorprenderte el hecho de que no hayas comenzado a programar y ya tengas millones de piezas de código utilizable. ¡Gracias a Composer no tenemos días tristes!. Dicho esto, comencemos con los conceptos.

Gestión de Dependencia

Imaginemos: Podrías descargar y agregar al proyecto los paquetes de forma manual, es decir, creamos la carpeta, pegamos el paquete (todo dentro de vendor/), cargamos las clases, inicializamos variables, y quizás muchas mas cosas hasta que por fin el sistema funcione. Pero, dentro de un año más o menos hay que actualizar y al hacerlo nuevamente manual nuestro sistema explotará, lo creas o no...

Hay cosas peores, preguntarnos ¿cuál dependencia es la que está fallando? ¿cuál actualizo? AUXILIOOOO... En realidad es muy díficil resolver todo esto y no queremos lidiar con todos estos problemas. Aquí es donde llega el Composer transformado en Super Saiyajin Blue y listo para entrar con la Doctrina egoísta para ayudarnos y así poder seguir adelante amando esta profesión... Composer se ocupa de esto y maneja todas las dependencias por nosotros, los instala, actualiza, inicializa y todo tomando en cuenta las versiones actuales y las soportadas.

Clase de carga automática - Autoloading

Composer registra automáticamente las clases para posteriormente usar. Tener que incluir cada clase antes de que podamos utilizarla es engorroso, repetitivo y ensucia nuestro código con un montón de innecesarias instrucciones include, require y require_once.

Esto es Autoloading ¿No es genial?

Colaboración en equipo

Una razón más para usar Composer es el trabajo en equipo.

Contamos con un archivo que define todos los paquetes junto a su versión. Es decir, detalla paquete a paquete y las versiones exactas, estamos hablando de composer.json. Esto significa que con una instalación rápida se ejecuta la versión exacta de todas las dependencias a cualquier miembro del equipo.

No más casos de este tipo

  • "Amigo, ¿qué necesito para ejecutar el sistema?"
  • o "tal vez necesito para actualizar mis paquetes"
  • o la peor "en mi computador si funciona".

Composer se encargará de esto por ti.

Paquetes

Composer = Paquetes. Los paquetes son pequeños directorios de código que han sido creados para servir o solucionar un problema en particular. Los paquetes de Composer están limitados solo por la creatividad del autor y hay diferentes tipos de paquetes, veamos:

Paquetes de aplicaciones

Podrías argumentar que esto no debería llamarse paquete. Sin embargo podemos decir que son proyectos impulsados por Composer. Los paquetes de aplicaciones contienen un composer.json solo para listar otros paquetes como dependencias o aprovechar la gran capacidad de carga automática de clases de Composer (Autoloading).

Estos paquetes no están destinados a ser redistribuibles. Es tu proyecto, es tu bebé y puede ser la base de código confidencial, o algo experimental, pero no es para compartir.

Este tipo de paquetes podría ser Laravel, Symfony, Spark, etc (aunque se distribuyen). Un ejemplo mas claro sería el proyecto Rimorsoft Online, es un paquete de aplicación que usa a su vez muchos otros paquetes.

Por otro lado, no te preocupes por la implementación, solo debes saber que estos paquetes contienen código y las clases que deseamos utilizar. Sé feliz, Composer descarga y carga de forma automática todo por y para nosotros.

Paquetes de dependencia

Este es el tipo por defecto y es simplemente copia del paquete en el directorio vendor/ (instalación básica de un paquete). Una dependencia o paquete son los 'redistribuibles' como el paquete para generar pdf.

Énfasis: No es nuestro proyecto web. Son librerias o componentes distribuible y reutilizables. De hecho el formato de un paquete de aplicación y de un paquete de dependencia no es muy diferente, incluso es casi idéntico. Se puede decir que un paquete de dependencia es un kit de desarrollo para resolver un problema y proporciona una funcionalidad específica, y un paquete de aplicación es un sistema completo (un proyecto web completo).

En otras palabras, un paquete de dependencia es un directorio de cógido para redistribuir que está destinado a hacer mas fácil la vida de otros programadores.

Por favor no te preocupes, es un proceso bastante simple y la experiencia te ayudará a manejar estos conceptos.

Recuerda comentar y compartir... :)

Adquiere en preventa y aprovecha un gran descuento TDD en Laravel

Comparte en

Creado por: Venezuela Italo Morales

Profesor de #Laravel y #PHP en Rimorsoft Online

Más información


Ayuda con datatables

Hola, acudo a ustedes para ver si pueden orientarme resulta que tengo una tabla que obtiene datos agrupados por nombre de empresa, cada empresa tiene locales en renta y se debe obtener el monto que se debe o que ha sido pagado, segun corresponda tengo algo mas o menos así:

$result = DB::table('espacios') ->select('cuenta_por_cobrars.id','clientes.id as ide...

Obtener Datos de un select en otros input

Buenas estoy intentando que al seleccion un producto me pegue luego en unas cajas de texto los datos.

Mi Controlador:

public function lista(){

$productos = Productos::pluck('Codigo','Descripcion','PVP','id')->prepend('selecciona'); return view ('Productos.NuevoProducto2',compact('productos'));

}

Mi vista:

@extends('admin.plantilla')

@section('content'...

Input que depende del valor seleccionado en Select

Buenas amigos, estoy intentando que al picar en el select me sale el listado de productos por ejemplo y quiero poner en un input el precio.

Por el momento consigo tener mi select lleno de datos, pero no consigo que me envie los datos al input.

Alguna idea o ejemplo para orientarme?

gracias...

componentes

hola amigo italo, buen dia... tengo el siguiente inconveniente... quisiera hacer un select con un componente que me cargue los funcionarios de una empresa y colocarlo en varios formularios en diferentes modales. el componente lo hago correctamente y carga los funcionarios; cuando selecciono el funcionario quisiera cargarlo a una variable VUE que esta en mi instancia principal...