Header Ads Widget

Ticker

6/recent/ticker-posts

Cómo crear perfiles de usuario en su aplicación

 

La mayoría de los sitios web que permiten a un usuario registrarse y aportar información tienen una página de perfil para cada usuario. Esta aplicación no es diferente. En este tutorial, lo que queremos hacer es permitir que los usuarios del sitio web hagan clic en un nombre de usuario en el navegador y ver más información sobre ese usuario en su página de perfil. Configuraremos una función de página de perfil básica con casos de prueba compatibles en nuestro código para asegurarnos de que funcione bien. Al igual que con los tutoriales anteriores, dejaremos que los resultados de la ejecución de nuestras pruebas nos orienten sobre cuáles son los próximos pasos a seguir al crear la página de perfil para nuestros usuarios.


Crear una prueba de perfil de usuario

Navegando a la carpeta de características de nuestra aplicación, podemos agregar una nueva clase de prueba llamada ProfilesTest. Luego continúe y agregue el texto estándar para una nueva prueba.
crear clase de prueba de perfil de usuario
crear código auxiliar de clase de prueba


Crear el pseudocódigo de prueba

  • Dado que tenemos un usuario en la aplicación
  • Cuando visitamos el perfil / su nombre
  • Entonces deberíamos ver su nombre en la página.

Ok suena bastante razonable. Traduzcamos eso en un método de prueba y código asociado.

Comencemos a ejecutar la prueba y dejemos que los errores nos dirijan sobre los siguientes pasos a seguir.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 947 ms, memoria: 8,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
SymfonyComponentHttpKernelExceptionNotFoundHttpException: GET http: // localhost / profiles / Athena Zulauf

/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php:107
/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:326
/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:120
/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:345
/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:168
/home/vagrant/Code/forumio/tests/Feature/ProfilesTest.php:18

¡ERRORES!
Pruebas: 1, afirmaciones: 0, errores: 1.

Obtenemos una NotFoundHttpException que, por supuesto, significa que no hay una ruta para respaldar esa solicitud.


Agrega la ruta necesaria

Abra el archivo de rutas web.php y agreguemos la ruta que necesitamos como se resalta aquí. Cuando un usuario realiza una solicitud a / profiles / the user, entonces el método show () de ProfilesController debería activarse.

Ejecute la prueba nuevamente para ver cuál es el error.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 960 ms, memoria: 8,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
ReflectionException: la clase AppHttpControllersProfilesController no existe

La prueba da un error de que ProfilesController no existe. Esto tiene sentido, por supuesto, ya que aún no hemos creado el controlador que necesitamos para admitir perfiles.


Crear una clase ProfilesController

Podemos crear rápidamente un nuevo controlador con este fragmento.

vagrant @ homestead: ~ / Code / forumio $ php artisan make: controller ProfilesController
Controlador creado con éxito.

Dado que ahora tenemos un ProfilesController en su lugar, ese error debe corregirse en la prueba. Probemos de nuevo.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 918 ms, memoria: 8,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
BadMethodCallException: el método [show] no existe en [AppHttpControllersProfilesController].

Ahora estamos obteniendo una BadMethodCallException. Tiene sentido, por supuesto, ya que no hay un método show () en el controlador.


Crear un método show ()

Ahora podemos agregar el método show () a la clase ProfilesController. Aquí vamos:

El método show existe ahora. Todavía no hace nada, pero ejecutemos nuestra prueba para ver cuál es el mensaje ahora.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

F 1/1 (100%)

Tiempo: 881 ms, memoria: 8,00 MB

Hubo 1 falla:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
No se pudo afirmar que '' contiene "Forrest Treutel".

/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:236
/home/vagrant/Code/forumio/tests/Feature/ProfilesTest.php:19

¡FALLOS!
Pruebas: 1, afirmaciones: 1, fallos: 1.

Parece que nuestro buen amigo Forrest Treutel no aparece en la página cuando visitamos su perfil. Arreglemos ese método show () para corregir este error.


Crear una vista para perfiles de usuario

El show.blade.php para perfiles aún no existe, así que necesitamos crearlo. Solo por sonrisas, confirmemos eso con nuestra prueba.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 861 ms, memoria: 8,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
InvalidArgumentException: no se encontró la vista [profiles.show].

Sí. No se encuentra la vista profiles.show. Creemos esa vista.
crear un nuevo archivo de vista

Comenzaremos con este marcado básico.

Démosle otra vuelta a esa prueba.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 1,26 segundos, memoria: 10,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
ErrorException: Variable no definida: profileUser (Ver: /home/vagrant/Code/forumio/resources/views/profiles/show.blade.php)

Parece que tenemos una variable indefinida. Necesitamos pasar datos a la vista para solucionar este problema. Para hacer esto, podemos actualizar el método show () en ProfilesController así.

Ahora que compartimos nuestra variable, podemos ejecutar la prueba para ver si la arreglamos.

vagabundo @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_has_a_profile
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 911 ms, memoria: 8,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_a_user_has_a_profile
IlluminateDatabaseEloquentModelNotFoundException: No hay resultados de consulta para el modelo [AppUser].

Así que arreglamos el error anterior, pero ahora estamos obteniendo una ModelNotFoundException. El motivo está en cómo se configura la vinculación del modelo de ruta de forma predeterminada.


Configuración de la clave de ruta de enlace de modelo de ruta

Si queremos que el modelo use un slug, como lo estamos haciendo aquí, entonces necesitamos configurar el método getRouteKeyName () para que admita esto. Continúe y abra el Modelo de usuario, y podemos hacer este ajuste.

Una vez más, ejecutemos la prueba. Yahoo !! ¡Mira eso VERDE!
prueba phpunit pasando

Esto significa que si visitáramos una página de perfil en el navegador, debería funcionar en este punto. Da la casualidad de que hay un usuario en el sistema llamado "Tom", así que visitemos http://forum.io/profiles/tom y veamos lo que obtenemos.
página de perfil de usuario que funciona en el navegador


Mejor estilo con Bootstrap

Entonces vemos el nombre de usuario en la página, y no estamos exactamente impresionados por el diseño. La lógica de la página funciona bien, pero queremos que las cosas se vean un poco más agradables. Podemos actualizar la vista show.blade.php a algo como esto:

lo que le da un diseño de perfil un poco más agradable.
ejemplo de encabezado de página de arranque


Visualización de hilos creados por un usuario

Una característica que nos gustaría agregar es la capacidad de ver todos los hilos creados por el usuario cuyo perfil está viendo. Para agregar esta función, una vez más crearemos una prueba primero para admitirla. En la clase ProfilesTest, podemos agregar un nuevo método de prueba de test_profiles_display_all_threads_by_the_user (). Ahora pensemos en lo que queremos que logre la prueba.

  • Dado que tenemos un usuario
  • Dado que tenemos un hilo creado por ese usuario
  • Cuando visitamos su página de perfil
  • Entonces deberíamos ver su hilo

Aquí hay un código de prueba que se aproxima a estos pasos.

Con nuestra prueba en su lugar, podemos activarla para que se ejecute y observe los resultados.

vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_profiles_display_all_threads_by_the_user
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

F 1/1 (100%)

Tiempo: 1,22 segundos, memoria: 10,00 MB

Hubo 1 falla:

1) TestsFeatureProfilesTest :: test_profiles_display_all_threads_by_the_user
No se pudo afirmar que '(el html)' contiene "Alias ​​autem velit atque sit aspernatur".

/home/vagrant/Code/forumio/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:236
/home/vagrant/Code/forumio/tests/Feature/ProfilesTest.php:29

¡FALLOS!
Pruebas: 1, afirmaciones: 1, fallos: 1.

La prueba falla porque el título del hilo en realidad no aparece en la página de perfil. Necesitamos desarrollar el código que realmente haga que eso suceda. Podemos agregar este bloque de marcado a show.blade.php para mostrar los hilos del usuario.

Una vez más, ejecutaremos nuestra prueba para ver cómo funciona.

vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_profiles_display_all_threads_by_the_user
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

E 1/1 (100%)

Tiempo: 835 ms, memoria: 10,00 MB

Hubo 1 error:

1) TestsFeatureProfilesTest :: test_profiles_display_all_threads_by_the_user
ErrorException: argumento no válido proporcionado para foreach () (Ver: /home/vagrant/Code/forumio/resources/views/profiles/show.blade.php)

El error es quejarse de que se pasa un argumento no válido al bucle foreach. Bueno, eso tiene sentido en realidad ya que aún no creamos la relación de subprocesos en el modelo de usuario. Podemos agregar eso ahora mismo. También tenga en cuenta que agregamos el método latest () a la definición de relación para que estemos viendo los hilos del usuario, los hilos más recientes aparecen en la parte superior de la página.

Ejecutar nuestra prueba muestra que ahora está pasando.

vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_profiles_display_all_threads_by_the_user
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

. 1/1 (100%)

Tiempo: 892 ms, memoria: 10,00 MB

OK (1 prueba, 2 afirmaciones)

Cuando ahora visitamos la página de perfil de nuestro usuario de muestra Tom en http://forum.io/profiles/tom, ¡vemos un hilo reciente que creó! Por lo tanto, parece que ahora está listo para ver los hilos en la página de perfil del usuario.
ver los hilos de los usuarios en la página de perfil


Paginación de hilos en la página de perfil de usuario

A medida que los usuarios pasan más tiempo publicando hilos en la aplicación, pueden acumular cientos y cientos de hilos creados. Deberíamos paginarlos en la página de perfil en lugar de intentar cargarlos todos de una sola vez. Esto es fácil de configurar en el método show () de ProfilesController, así como en el archivo de vista asociado con una llamada a $ threads-> links ().
Actualizar el controlador

Actualizar la vista

Ahora la paginación está funcionando bien. Lo configuramos en solo 1 en este punto solo para demostrar. Tal vez podría aumentarlo hasta 20 o 30 en la aplicación real.
paginación en laravel


Vinculación de nombres de usuario a su página de perfil

En este punto, los nombres de usuario que se muestran en nuestros archivos de vista no se vinculan a ninguna parte. Actualicemos eso para que los usuarios puedan hacer clic en un nombre de usuario en el navegador y ser llevados a su página de perfil.

En show.blade.php puede intercambiar instancias del primer enlace con el segundo enlace.

En reply.blade.php puede intercambiar, puede intercambiar instancias del primer enlace con el segundo enlace.

Ahora todas las instancias de un nombre de usuario en el navegador enlazan al perfil del usuario.


Hacer uso de rutas con nombre

Otra opción que tiene en este caso es configurar una ruta con nombre si lo desea. De esta manera, puede usar la ruta nombrada en el href de sus etiquetas de anclaje de los archivos de vista. ¿Como funciona esto? Bueno, en primer lugar, debemos asignar un nombre a la ruta en cuestión. Hacemos esto en nuestro archivo de rutas con el ejemplo resaltado aquí. Estamos nombrando esta ruta 'perfil'.

Lo bueno de las rutas con nombre es que puede continuar usando los enlaces regulares como ya lo hemos configurado. Sin embargo, además, podemos formatear nuestros enlaces usando el nombre de la ruta como vemos aquí.

En show.blade.php puede intercambiar instancias del primer enlace con el segundo enlace.

En reply.blade.php puede intercambiar instancias del primer enlace con el segundo enlace.


Cómo crear perfiles de usuario en el resumen de su aplicación

¡Qué gran tutorial tuvimos aquí! Había que seguir muchos pasos para que nuestra página de perfil de usuario para los usuarios se configurara y funcionara correctamente. Afortunadamente, nos tomamos nuestro tiempo y logramos que todo funcionara bien.



Publicar un comentario

0 Comentarios