{"id":26519,"date":"2024-03-19T14:47:57","date_gmt":"2024-03-19T13:47:57","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=26519"},"modified":"2024-04-01T16:17:11","modified_gmt":"2024-04-01T14:17:11","slug":"reactividad-en-laravel-con-livewire","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/","title":{"rendered":"Reactividad en Laravel con Livewire"},"content":{"rendered":"\n<p>El frontender puede llegar a estar sobrevalorado en un proyecto y muchas veces con raz\u00f3n. Una aplicaci\u00f3n o web nos entra por los ojos y si no despierta atenci\u00f3n, est\u00e1s fuera del mercado.<\/p>\n\n\n\n<p>Cada vez es m\u00e1s complejo realizar un frontal adecuado, hace a\u00f1os que hemos dejado atr\u00e1s el clonado de webs que funcionan, para apostar algo nuevo.<\/p>\n\n\n\n<p>Dise\u00f1os que deben ser espectaculares y novedosos, con alto grado de interactividad con el usuario y sobre todo con comunicaciones punto a punto.<\/p>\n\n\n\n<p>La reactividad es parte fundamental de cualquier aplicaci\u00f3n que pretenda alcanzar altas cuotas de usuarios y en general, todo desarrollo deber\u00eda tener ese prop\u00f3sito.<\/p>\n\n\n\n<p>Con desarrollo basados en React, VUE o Angular, dejamos fuera a gran parte de los desarrolladores de Backend que ven en estas tecnolog\u00edas un muro de entrada al desarrollo de frontales interactivos. Las bibliotecas de Javascript tienen una complejidad similar a la que tienen los frameworks de backend, con m\u00f3dulos y herramientas auxiliares para alcanzar mayores niveles de eficiencia o reusabilidad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-livewire\">Livewire<\/h2>\n\n\n\n<p>Para reducir la barrera de entrada desde el backend hasta el frontend, <a href=\"https:\/\/livewire.laravel.com\/\" class=\"ek-link\">Laravel dispone de Livewire<\/a>. Una tecnolog\u00eda de backend que permite desarrollar frontales reactivos sin necesidad de saber Javascript.<\/p>\n\n\n\n<p>Livewire es un m\u00f3dulo independiente que se instala en la capa de control y de vista de Laravel, para crear comunicaciones punto a punto entre los elementos de dise\u00f1o de una web y en framework del backend.<\/p>\n\n\n\n<p>Encapsula el c\u00f3digo PHP y las vistas de Blade, transformando el c\u00f3digo en Javascript de forma transparente al desarrollador.<\/p>\n\n\n\n<p>Posiblemente no sea la soluci\u00f3n perfecta para aplicaciones con un alto grado de reactividad, pero s\u00ed es una soluci\u00f3n muy \u00fatil cuando este uso es puntual, que es lo que nos ocurre habitualmente en las aplicaciones empresariales.<\/p>\n\n\n\n<p>Cualquier zona o elemento de la pantalla es susceptible de tener reactividad y solamente necesitamos poder encapsularlo en una etiqueta DIV. La conectamos con Livewire por cualquiera de los m\u00e9todos disponibles y autom\u00e1ticamente tendremos refrescos parciales de la pantalla. Mediante comunicaci\u00f3n AJAX, solicitar\u00e1 al backend la informaci\u00f3n necesaria para pintar nuevamente ese espacio que tiene reservada nuestra vista Blade al componente Livewire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ejemplo-de-uso\">Ejemplo de uso<\/h2>\n\n\n\n<p>Livewire fue creado en 2020 y su popularidad lo llev\u00f3 a ser incluido en Laravel 8. Actualmente, nos encontramos con su tercera versi\u00f3n mayor, que puede ser utilizada en Laravel 10 o en Laravel 11. En el ejemplo, realizaremos una peque\u00f1a aplicaci\u00f3n con Laravel 11 para poder ver el uso de Livewire, no obstante, si tienes la versi\u00f3n anterior, el c\u00f3digo es totalmente compatible.<\/p>\n\n\n\n<p>Vamos suponer que tenemos un listado de usuarios creados con el model User por defecto de cualquier instalaci\u00f3n de Laravel, con un campo nombre y un campo email. Dentro de ese listado vamos a filtrar por Nombre y as\u00ed localizar los usuarios coincidentes.<\/p>\n\n\n\n<p>Para poder crear un componente Livewire, debemos instalar el paquete correspondiente, porque no forma parte de la instalaci\u00f3n b\u00e1sica de Laravel en ninguna de sus versiones:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">composer <span class=\"hljs-built_in\">require<\/span> livewire\/livewire<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Y tras unos segundos tenemos disponible el comando para que podamos crear un nuevo componente Livewire con artisan<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">php<\/span> <span class=\"hljs-selector-tag\">artisan<\/span> <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:livewire<\/span> <span class=\"hljs-selector-tag\">FilterUser<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Esto crea dos ficheros.<\/p>\n\n\n\n<p>Por una parte, tenemos el componente visual, que se encuentra en la carpeta livewire de las vistas. Si es nuestro primer componente livewire del proyecto, adem\u00e1s, nos crea la propia carpeta. El nombre del fichero ser\u00e1 el mismo que hemos utilizado en min\u00fasculas y separado por un guion.<\/p>\n\n\n\n<p>Por otra parte, tenemos el componente con la l\u00f3gica de negocio, que se encuentra en la carpeta livewire dentro del bloque de aplicaci\u00f3n. En este caso, el fichero respeta la nomenclatura CamelCase original.<\/p>\n\n\n\n<p>En el fichero con la clase, podemos verificar, que extiende de la clase Component y tiene un \u00fanico m\u00e9todo render. Este m\u00e9todo ser\u00e1 el que se ejecute cada vez que se solicite el repintado. Inicialmente s\u00f3lo contiene una llamada para obtener la vista que nos acaba de crear artisan.<\/p>\n\n\n\n<p>En la vista tenemos un tag de tipo div que contiene una frase c\u00e9lebre. Este ser\u00e1 el \u00e1mbito de Livewire, es decir, la parte de la pantalla que nos va a repintar tras cada llamada al servidor.<\/p>\n\n\n\n<p>Vamos a modificar nuestro fichero filter-user.blade.php para que tenga un aspecto como este:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>Filtrar usuarios: <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">wire:model.live<\/span>=<span class=\"hljs-string\">\"text\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">br<\/span>&gt;<\/span>\n        \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">table<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">thead<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Nombre<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Email<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">thead<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tbody<\/span>&gt;<\/span>\n          @foreach ($users as $key =&gt; $user)\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;name }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;email }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n          @endforeach\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tbody<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">table<\/span>&gt;<\/span>\n    \n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Cuando creamos el campo de tipo texto, debemos decirle el tipo de <em>cable <\/em>(<strong>wire<\/strong>, que es la forma en la que Livewire denomina la reactividad) que queremos aplicar. En este este caso, hemos elegido que la conexi\u00f3n sea con el modelo text. Este modelo no hay que confundirlo con un modelo Laravel, sino que es el nombre de la propiedad dentro de la clase FilterUser donde se copiar\u00e1 el valor del campo tras ser modificado.<\/p>\n\n\n\n<p>Vamos ahora a la clase.<\/p>\n\n\n\n<p>Tenemos que definir como propiedades p\u00fablicas todas aquellas que se utilicen para comunicar la clase y la vista. En nuestro caso vamos a tener dos. Por una parte el <em>modelo <\/em>indicado en la vista y por otra parte, vamos a definir un objeto que ser\u00e1 la colecci\u00f3n de resultados. Sobre esta colecci\u00f3n haremos que se carguen todos los datos que luego la vista de Livewire debe pintar por pantalla.<\/p>\n\n\n\n<p>Con esto,&nbsp;nos quedar\u00eda un c\u00f3digo de la clase FilterUser.php m\u00e1s o menos as\u00ed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Livewire<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Models<\/span>\\<span class=\"hljs-title\">User<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Livewire<\/span>\\<span class=\"hljs-title\">Component<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Database<\/span>\\<span class=\"hljs-title\">Eloquent<\/span>\\<span class=\"hljs-title\">Collection<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FilterUser<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Component<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> $text = <span class=\"hljs-string\">\"\"<\/span>;\n    <span class=\"hljs-keyword\">public<\/span> $users = <span class=\"hljs-keyword\">null<\/span>; \n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">render<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        \n        <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">$this<\/span>-&gt;text == <span class=\"hljs-string\">''<\/span>) {\n            <span class=\"hljs-keyword\">$this<\/span>-&gt;users = <span class=\"hljs-keyword\">new<\/span> Collection();\n        }\n        <span class=\"hljs-keyword\">else<\/span> {\n            <span class=\"hljs-keyword\">$this<\/span>-&gt;users = User::where(<span class=\"hljs-string\">'name'<\/span>, <span class=\"hljs-string\">'like'<\/span>, <span class=\"hljs-string\">'%'<\/span> . <span class=\"hljs-keyword\">$this<\/span>-&gt;text  . <span class=\"hljs-string\">'%'<\/span>)-&gt;get();\n        }\n        \n    <span class=\"hljs-keyword\">return<\/span> view(<span class=\"hljs-string\">'livewire.filter-user'<\/span>);\n    }\n}\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Como el componente por s\u00ed mismo no es de gran utilidad debemos insertarlo en una vista de tipo listado. Nos vamos a nuestra vista index.blade.php y creamos todo el contenido, menos el campo de b\u00fasqueda y el listado.<\/p>\n\n\n\n<p>Donde necesitemos que se visualice tanto el campo como el listado, vamos a incorporar una llamada a nuestro componente y a\u00f1adimos las directivas Blade para poder utilizar los estilos y el Javascript de Livewire. Indicamos los estilos en la cabecera y tan al final del body como sea posible, indicamos los scripts de Livewire. M\u00e1s o menos igual que har\u00edamos si trat\u00e1semos de utilizar jQuery.<\/p>\n\n\n\n<p>Con esto nos queda un HTML m\u00e1s o menos as\u00ed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"utf-8\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1\"<\/span>&gt;<\/span>\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>Laravel<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n\n        <span class=\"hljs-comment\">&lt;!-- Fonts --&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"preconnect\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"https:\/\/fonts.bunny.net\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"https:\/\/fonts.bunny.net\/css?family=figtree:400,600&amp;display=swap\"<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"stylesheet\"<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n            <span class=\"hljs-selector-tag\">table<\/span> { <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-number\">100%<\/span>; <span class=\"hljs-attribute\">border-collapse<\/span>: collapse; }\n            <span class=\"hljs-selector-tag\">th<\/span>, <span class=\"hljs-selector-tag\">td<\/span> { <span class=\"hljs-attribute\">padding<\/span>: <span class=\"hljs-number\">8px<\/span>; <span class=\"hljs-attribute\">text-align<\/span>: left; <span class=\"hljs-attribute\">border-bottom<\/span>: <span class=\"hljs-number\">1px<\/span> solid <span class=\"hljs-number\">#ddd<\/span>;}\n            <span class=\"hljs-selector-tag\">th<\/span> { <span class=\"hljs-attribute\">background-color<\/span>: <span class=\"hljs-number\">#f2f2f2<\/span>;}\n            <span class=\"hljs-selector-tag\">input<\/span> {<span class=\"hljs-attribute\">border-style<\/span>:<span class=\"hljs-number\">1px<\/span> solid <span class=\"hljs-number\">#888<\/span>; <span class=\"hljs-attribute\">background-color<\/span>:  <span class=\"hljs-number\">#f2f2f2<\/span>;}\n        <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n        @livewireStyles\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>Livewire 3 en Laravel 11<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">livewire:filter-user<\/span> \/&gt;<\/span>  \n        @livewireScripts\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>En el ejemplo, se ha eliminado la vista welcome y se ha creado en su lugar la vista index, con lo que tambi\u00e9n debemos modificar las rutas web, con este cambio:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Route<\/span>;\n\nRoute::get(<span class=\"hljs-string\">'\/'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> view(<span class=\"hljs-string\">'index'<\/span>);\n});<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si no lo has hecho todav\u00eda, debes ejecutar la migraci\u00f3n para crear la base de datos y la tabla users, as\u00ed como rellenar esta tabla con algunos datos para poder probar el ejemplo. Puedes hacerlo con un seeder o bien manualmente, que es la soluci\u00f3n que hemos utilizado en este caso<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"240\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG001-1024x240.png\" alt=\"\" class=\"wp-image-26601\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG001-1024x240.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG001-300x70.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG001-768x180.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG001.png 1032w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y ahora, ya solamente queda probarlo.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">php artisan serve<\/code><\/span><\/pre>\n\n\n<p>En una primera visualizaci\u00f3n, carga todo el contenido est\u00e1tico, pero la tabla est\u00e1 vac\u00eda. Es decir, estamos pasando por la parte del if en la que no hay ning\u00fan texto definido en la propiedad $this-&gt;text. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002-1024x517.png\" alt=\"\" class=\"wp-image-26602\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002-1024x517.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002-300x152.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002-768x388.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002-1536x776.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG002.png 1777w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Cuando escribimos cualquier car\u00e1cter, el componente Livewire detecta la modificaci\u00f3n de una de sus propiedades (en este caso, el valor del campo) y la traslada al modelo con el que est\u00e1 conectado (<em>$this-&gt;text<\/em>). Aqu\u00ed pasa por la otra parte de la rama del <em>if<\/em> y recupera los <em>User<\/em> que contienen el texto indicado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"482\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003-1024x482.png\" alt=\"\" class=\"wp-image-26603\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003-1024x482.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003-300x141.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003-768x361.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003-1536x722.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG003.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>As\u00ed de sencillo es utilizar Livewire 3 en tu proyecto Laravel. Ten en cuenta que esto es s\u00f3lo un ejemplo, por lo que las posibilidades y la reactividad que puedes implementar es mucho mayor seg\u00fan vayas profundizando en el conocimiento de esta herramienta, hasta alcanzar (casi) los niveles de React o VUE.<\/p>\n\n\n\n<p>Entre sus ventajas principales est\u00e1 que no necesitar\u00e1s conocer Javascript para que tu p\u00e1gina tenga un frontal reactivo. Adem\u00e1s, te independizas de la complejidad de realizar y procesar llamadas as\u00edncronas con AJAX y los repintados parciales. Todo el c\u00f3digo lo realizas como si fueran peque\u00f1as p\u00e1ginas est\u00e1ticas y Livewire se encargar\u00e1 de conectarlas.<\/p>\n\n\n\n<p>Si quieres el c\u00f3digo completo del ejemplo, <a href=\"https:\/\/github.com\/inforrada\/livewire3intro\" class=\"ek-link\">aqu\u00ed te dejo el enlace de git<\/a>.<\/p>\n\n\n\n<p>\u00a1Nos vemos en la&nbsp;<a href=\"https:\/\/community-es.codemotion.it\/comunidad\" class=\"ek-link\">comunidad<\/a>!<\/p>\n\n\n\n<script src=\"https:\/\/codemotion.activehosted.com\/f\/embed.php?id=44\" type=\"text\/javascript\" charset=\"utf-8\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>Livewire es una biblioteca de Laravel que permite crear aplicaciones web interactivas de una manera m\u00e1s sencilla y eficiente, sin necesidad de escribir c\u00f3digo JavaScript o AJAX. Livewire combina la potencia de Laravel en el lado del servidor con la interactividad en tiempo real en el lado del cliente.<\/p>\n","protected":false},"author":249,"featured_media":26599,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10606,10648],"tags":[11880,11875],"collections":[11932,11860],"class_list":{"0":"post-26519","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-es","8":"category-lenguajes-de-programacion","9":"tag-laravel-es","10":"tag-php-es","11":"collections-laravel","12":"collections-php","13":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Reactividad en Laravel con Livewire - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reactividad en Laravel con Livewire\" \/>\n<meta property=\"og:description\" content=\"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-19T13:47:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-01T14:17:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2200\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Martinez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Martinez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\"},\"author\":{\"name\":\"David Martinez\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2\"},\"headline\":\"Reactividad en Laravel con Livewire\",\"datePublished\":\"2024-03-19T13:47:57+00:00\",\"dateModified\":\"2024-04-01T14:17:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\"},\"wordCount\":1352,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png\",\"keywords\":[\"Laravel\",\"PHP\"],\"articleSection\":[\"Backend\",\"Lenguajes de programaci\u00f3n\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\",\"name\":\"Reactividad en Laravel con Livewire - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png\",\"datePublished\":\"2024-03-19T13:47:57+00:00\",\"dateModified\":\"2024-04-01T14:17:11+00:00\",\"description\":\"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png\",\"width\":2200,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Reactividad en Laravel con Livewire\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2\",\"name\":\"David Martinez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png\",\"caption\":\"David Martinez\"},\"description\":\"Hi! I'm David. Sometimes a speaker, sometimes a listener, and always interested in web technologies. I specialize in complex projects involving anything related to PHP and Javascript. Lately, I've been diving deep into Laravel and API development (and the worst part is that I'm starting to like it).\",\"sameAs\":[\"https:\/\/martinezmartinez.com\",\"https:\/\/www.linkedin.com\/in\/dmartinezmartinez\/\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Reactividad en Laravel con Livewire - Codemotion Magazine","description":"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/","og_locale":"en_US","og_type":"article","og_title":"Reactividad en Laravel con Livewire","og_description":"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-03-19T13:47:57+00:00","article_modified_time":"2024-04-01T14:17:11+00:00","og_image":[{"width":2200,"height":1100,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png","type":"image\/png"}],"author":"David Martinez","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"David Martinez","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/"},"author":{"name":"David Martinez","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2"},"headline":"Reactividad en Laravel con Livewire","datePublished":"2024-03-19T13:47:57+00:00","dateModified":"2024-04-01T14:17:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/"},"wordCount":1352,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png","keywords":["Laravel","PHP"],"articleSection":["Backend","Lenguajes de programaci\u00f3n"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/","name":"Reactividad en Laravel con Livewire - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png","datePublished":"2024-03-19T13:47:57+00:00","dateModified":"2024-04-01T14:17:11+00:00","description":"Livewire es una biblioteca de Laravel que permite crear aplicaciones web reactivas, sin necesidad de escribir c\u00f3digo JavaScript o AJAX.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png","width":2200,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/reactividad-en-laravel-con-livewire\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/"},{"@type":"ListItem","position":3,"name":"Reactividad en Laravel con Livewire"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2","name":"David Martinez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png","caption":"David Martinez"},"description":"Hi! I'm David. Sometimes a speaker, sometimes a listener, and always interested in web technologies. I specialize in complex projects involving anything related to PHP and Javascript. Lately, I've been diving deep into Laravel and API development (and the worst part is that I'm starting to like it).","sameAs":["https:\/\/martinezmartinez.com","https:\/\/www.linkedin.com\/in\/dmartinezmartinez\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-600x600.png","author_info":{"display_name":"David Martinez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000.png",2200,1100,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-300x150.png",300,150,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-768x384.png",768,384,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-1024x512.png",1024,512,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-1536x768.png",1536,768,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-2048x1024.png",2048,1024,true],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-100x100.png",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/03\/IMG000-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"David Martinez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"},"uagb_comment_info":0,"uagb_excerpt":"Livewire es una biblioteca de Laravel que permite crear aplicaciones web interactivas de una manera m\u00e1s sencilla y eficiente, sin necesidad de escribir c\u00f3digo JavaScript o AJAX. Livewire combina la potencia de Laravel en el lado del servidor con la interactividad en tiempo real en el lado del cliente.","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/26519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/249"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=26519"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/26519\/revisions"}],"predecessor-version":[{"id":26838,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/26519\/revisions\/26838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/26599"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=26519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=26519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=26519"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=26519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}