ArticleService: Usando controladores, eventos de Laravel

[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]

¡Usando controladores, eventos, oyentes, servicios y validación de Laravel juntos!

ArticleService – Podemos poner todos los códigos de una aplicación web en los controladores, ¡pero esta acción parece una locura y no es correcto hacerlo!

En este artículo veremos cómo estructurar una aplicación web con un patrón conocido. Debo decir que puede hacer los ejemplos a continuación de otras maneras diferentes y probablemente todos sean correctos, ¡así que este artículo es solo algunos ejemplos para hacer las cosas!

Déjeme explicarle el escenario:

¡Imagínese que tenemos una aplicación mediana simple y tendrá una sección de Contenido en la que un usuario puede compartir una publicación de blog y sus seguidores notarán cuando se publique un nuevo artículo!

[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]


1. Manera fea

Cree un ArticleController y coloque todos los códigos en él, como se muestra a continuación:

2. Mejor manera

Primero, debemos reemplazar Request $request por ArticleStoreRequest $request para validar los datos de una mejor manera:

php artisan make:request ArticleStoreRequest

No olvide devolver true en el método de authorize(), para que el usuario pueda realizar esta acción:

ArticleService

En segundo lugar, debemos hacer que ArticleService mueva la lógica de creación del controlador al servicio. ¡Porque lo único que hará un controlador es pasar datos!

Por lo tanto, crearemos ArticleService en la carpeta Servicios y escribiremos el código de creación en un método relacionado simple y, considerando el principio de responsabilidad única, moveremos la imagen de carga a su método como se muestra a continuación:

Echemos otro vistazo a nuestro ArticleController nuevamente para ver qué se ha cambiado hasta ahora:

ArticleService

  • Ahora usemos Event y Listener para enviar correos electrónicos a los seguidores del autor del artículo:
php artisan make:event ArticlePublishedEventphp artisan make:listener ArticlePublishedListener --event=ArticlePublishedEvent

Esta filosofía nos ayuda a dividir las operaciones y el evento se disparará automáticamente cuando y donde queramos. ¡Además esto pretenderá que nos repitamos!

La clase de evento debe aceptar el modelo de usuario y el modelo de artículo, que luego se pasa a CUALQUIER oyente de ese evento:

Luego, el evento se dispara desde el controlador, así:

ArticleService

Y, en la clase Listener, repetimos la misma lógica:

ArticleService


¡Y eso es todo! ¿De qué manera prefieres hacerlo? – ArticleService

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]

Diego Pacheco

Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Recent Post

[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]