Como lo platicamos anteriormente, hasta este momento hemos dejado sin validación nuestra sección para crear usuarios, esto es muy conveniente en este punto porque estamos desarrollando nuestra app, pero no queremos dejar esta sección pública cuando subamos nuestra app a producción.
Vamos a continuar practicando nuestras habilidades y crearemos el comando app:create-user
Creando el comando
Debemos crear una clase nueva que en este caso yo llamaré CreateUserCommand y que debe extender de Symfony\Component\Console\Command\Command, despues de eso, vamos a agregar la propiedad estática $defaultName con el valor ‘app:create-user’; y crearemos los métodos configure y execute, aunque por ahora los dejaremos vacÃos.
<<?php
namespace App\Commands;
use App\Models\User;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CreateUserCommand extends Command
{
protected static $defaultName = 'app:create-user';
protected function configure()
{
}
protected function execute(InputInterface $input, OutputInterface $output)
{
}
}>
Configuración del comando
Ahora que ya tenemos nuestro comando vamos a pasar a agregar la configuración, para esto vamos a indicar que necesitamos un parámetro requerido que será el email del usuario.
<$this->addArgument('email', InputArgument::REQUIRED, 'The email of the user.');>
Ejecución del comando
Una vez que tenemos la configuración, es momento de ejecutar nuestro comando, para esto lo único que vamos a hacer es leer el argumento requerido y de ahi crearemos un usuario con un password default:
<$output->writeln([
'User Creator',
'============',
'',
]);
$user = new User();
$user->email = $input->getArgument('email');
$user->password = password_hash('UnPassMuySeguro', PASSWORD_DEFAULT);
$user->save();
$output->writeln('Done.');>
Registro del comando
Para finalizar, lo único que necesitamos es registrar nuestro comando en el archivo console.php y ya estará listo para ser utilizado por nuestros usuarios.
$application->add(new \App\Commands\CreateUserCommand());
Conclusión
Asà se debe ver el archivo final:
<<?php
namespace App\Commands;
use App\Models\User;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CreateUserCommand extends Command
{
protected static $defaultName = 'app:create-user';
protected function configure()
{
$this
->addArgument('email', InputArgument::REQUIRED, 'The email of the user.')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln([
'User Creator',
'============',
'',
]);
$user = new User();
$user->email = $input->getArgument('email');
$user->password = password_hash('UnPassMuySeguro', PASSWORD_DEFAULT);
$user->save();
$output->writeln('Done.');
}
}
>
¿Ves cuán fácil fue? con todo lo que aprendiste hasta este momento crear comandos será una tarea simple pero a la vez muy util para tus aplicaciones, digamos que los comandos son acciones que solo podrán ser ejecutadas por alguien que tenga acceso de consola a nuestra aplicación, por lo que estas acciones a la vez son muy seguras.
Como paso siguiente y para que sigas practicando, te propongo los siguientes retos:
-
Agrega el parámetro opcional password y úsalo en caso de que el usuario lo ponga, en caso de que no lo encuentres entonces usa el default.
-
Crea en la aplicación una sección para poder cambiar el password dentro del área de administración.
Con lo que sabes hasta ahora, ambas tareas serán muy sencillas para ti y te permitirán reforzar tus conocimientos.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.