lunes, 17 de julio de 2017

Laravel checkbox SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'on' for column

Si en tu formulario tienes un checkbox y al darle al botón de submit de tu formulario te sale ese error 1366, te aconsejo hagas lo siguiente, por ejemplo, en tu controlador:

Dado que el checkbox, en vez de TRUE, FALSE devuelve 'on' y '' (cadena vacía), hay que darle otro tratamiento:
/*Para evitar tener que preguntar si el valor es 'on' o vacío para el caso del checkbox*/
$checkboxValue = $request->get('checkboxValor') == 'on' ? true : false;
Saludos ✌🏽

lunes, 10 de julio de 2017

Cómo poner emoji en tu terminal en la MAC

Para poner emoji en tu terminal como se muestra en la imagen, sigue los siguientes pasos:

Emoji en la terminal de la Mac


Abre una terminal y ve al directorio raíz:

$ HOME

Ahora debes editar un archivo como sigue:

$ sudo nano .bash_profile

Pon ahora el siguiente texto, si hay más líneas de código ponlo hasta abajo:


export PS1="  :\w  \u $ "

Ahora, dentro de las comillas, y antes de los dos puntos diagonal inversa doble u :\w pon el o los emojis que quieras. Coloca tu cursor antes de esa doble u, haz click en el menú de hasta arriba en donde dice Edición y luego hasta abajo donde dice "Emoji y símbolos" y ya se te aparecerá una lista de emojis. Los eliges. Pero toma nota que no se verán, simplemente estarán ahí invisibles. Ahora, para guardar los cambios presiona "control O" luego enter para guardar los cambios y ahora presiona "Control X" para salir.

Para visualizar los cambios, abre otra pestaña de la terminal. O simplemente cierra todo, si gustas, y vuelve a abrir la terminal.

Listo! 🙌🏽

Cómo saber si tengo instalado npm y si es global

Para saber si tienes instalado el npm en tu máquina e incluso si sólo a nivel local o global, ejecuta primero este comando para ver si tienes instalado el npm de manera global:

$ npm list -g npm

Te dirá la versión que tienes de npm instalada globalmente y si además necesitas instalarla.

Si necesitas actualizar tu npm, simplemente ejecuta el siguiente comando:

$ sudo npm i -g npm

Si quieres saber cómo actualizar node.js y el npm, haz clic aquí.

Referencias: https://stackoverflow.com/a/26104367/1883256
Saludos 😎

Laravel blade, mostrar un listado de todos los errores de un formulario

Para mostrar todos los errores en laravel blade, hacer lo siguiente:


@if($errors->has())
   
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

o también:
@if(count($errors)>0)
     Your details could not be changed due to the following errors:
   
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif
Esto es muy útil para cuando muestras error por error en cada casilla o entrada (input) y de repente Laravel te dice que hay errores pero no sabes cuál es.

Saludos 🤘🏽

domingo, 9 de julio de 2017

Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 8.x

Este error me salió justo después de haber actualizado Node js en mi máquina virtual de Laravel Homestead en Mac.

Para solucionarlo, corrí el siguiente comando (dentro del directorio raíz de Laravel Homestead):

npm rebuild node-sass

Y después de que se ejecutó el programa, me salí de la máquina virtual:

$ exit

Reinicié todo el vagrant:

$ vagrant reload --provision

Entré de nuevo y volví a correr dentro de la carpeta raíz de mi proyecto de prueba de Laravel:

$ npm run watch

Y ya no me salieron errores.

sábado, 8 de julio de 2017

403 Forbidden nginx/1.11.9

Este error suele suceder porque a tu Laravel, en el archivo Homestead.yaml está mal la ruta a tus archivos, es probable que le falte ponerle lo siguiente:

Le ha de faltar /public:

      - map: proyecto.app

      to: /home/vagrant/Dir/proyecto/public
Saludos 🍸

Laravel homestead npm run events.js:160 Unhandled 'error' event

Este error me salió al intentar correr el comando $ npm run watch

De hecho salen un montón de errores ... 😱

Procedí pues a la carpeta raíz de mi proyecto en Laravel Homestead y ejecuté el siguinete comando:

$ npm install


Y esperé varios minutos a que descargara e instalara un montón de cosas. Una vez terminado. Pues sí. Ya jaló. 😌

Referencias: [al final hasta abajo]: https://github.com/JeffreyWay/laravel-mix/issues/94

jueves, 6 de julio de 2017

Cómo declarar una variable en Laravel Blade

Hay veces en las que necesitas declarar una variable en laravel blade. Hay básicamente dos maneras:
 
{{ $variable }}
y la otra
{{--*/ $variable = 'prueba' /*--}}
{{ $variable }}
Saludos 🍸!

Generar registros aleatorios en la base de datos con faker en Laravel

En este caso lo haremos para generar nuevos registros dentro de la tabla `users`. Cabe resaltar que en las últimas versiones de Laravel, Faker ya viene incluido. Obsérvese que estoy utilizando varios campos, dependerá del lector cuáles pone o quita.

Para fines prácticos, vamos a generar los registros desde nuestro archivo de rutas routes/web.php:
/* FAKER */
Route::get('/users/generate',function (){
    $faker = Faker\Factory::create();

    for($i=0;$i<102;$i++){
        //echo $faker->name . ', Email Address: ' . $faker->unique()->email . ', Contact No' . $faker->phoneNumber . '
'; \App\User::create([ 'username' => $faker->userName, 'firstname' => $faker->firstName, 'lastname' => $faker->lastName, 'email' => $faker->email, 'birthdate' => $faker->date('Y-m-d'), 'password' => bcrypt('la_contraseña'), 'location' => $faker->city, 'gender' => $faker->randomElement($array = ['male','female']), 'active' => $faker->numberBetween(0,1), 'country_id'=> $faker->biasedNumberBetween('254','506'), 'created_at'=> $faker->dateTime, ]); } });
Para ejecutar el código, simplemente tecleamos en la dirección, dependiendo del dominio de nuestra aplicación, digamos, "miaplicacion.app:8000", tecleamos la siguiente dirección:

http://miaplicacion.app:8000/users/generate

En este caso generamos 102 nuevos registros.

Con DB Seeder
Con esta metodología hay que generar otro archivo via consola y luego correr dicho comando. Generamos el archivo en consola con el siguiente comando:
$ php artisan make:seeder UsersTableSeeder
Abrimos el archivo database/seeds/UsersTableSeeder.php y lo editamos instanciando a la clase Faker e indicando cuáles columnas llenar así como el número de registros deseados en el ciclo for:
  $faker->userName,
                'firstname' =>  $faker->firstName,
                'lastname'  =>  $faker->lastName,
                'email'     =>  $faker->email,
                'birthdate' =>  $faker->date('Y-m-d'),
                'password'  =>  bcrypt('password'),
                'location'  =>  $faker->city,
                'gender'    =>  $faker->randomElement($array = ['male','female']),
                'active'    =>  $faker->numberBetween(0,1),
                'country_id'=>  $faker->biasedNumberBetween('254','506'),
                'created_at'=>  $faker->dateTime,
            ]);
        }
    }
}
Luego tenemos que dar de alta dicho seeder en /database/seeds/DatabaseSeeder.php
call(UsersTableSeeder::class);
        $this->call(UsersTableSeeder::class);
    }
}
Finalmente ejecutamos el archivo en consola:
$ php artisan db:seed
Saludos

miércoles, 5 de julio de 2017

Microsoft Word Cómo pasar texto a minúsculas o a mayúsculas

Estás en Word, pegas un pedazo de texto y resulta que está en mayúsculas y lo quieres pasar a minúsculas. Aquí te digo como.

A manera de ejemplo vamos a pasar un pedazo de texto que está en mayúsculas a minúsculas.

Localizamos dicho texto:

Laravel crear un nuevo evento para enviar una notificación al usuario vía correo electrónico

En este artículo explico cómo hacerle para enviar una notificación vía correo electrónico al usuario cuando ocurre un evento específico.

Contexto

Digamos que tenemos un formulario en donde el usuario puede actualizar su perfil, entre ellos su nombre de usuario. Dado que, en este caso, el usuario puede acceder al sistema ya sea tecleando su nombre de usuario o correo electrónico, es necesario notificar, a manera de mensaje informativo vía correo electrónico, al usuario de que, para poder acceder al sistema, deberá teclear el nuevo nombre de usuario.

martes, 4 de julio de 2017

Laravel: cómo crear una nueva regla de validación personalizada

Para crear una o más nuevas reglas de validación en Laravel, es recomendable hacerlo en un (nuevo) Service Provider.

Vamos pues a la consola dentro de la carpeta raíz de nuestro proyecto (Artisan CLI) y tecleamos lo siguiente:

$ php artisan make:provider CustomValidationRulesProvider

Abrimos este nuevo archivo app\Providers\CustomValidationRulesProvider.php .  Dentro de la función boot() ponemos nuestra regla, en este caso la que vimos en el post anterior "Laravel: cómo validar entradas de sólo letras pero con espacios":
use Illuminate\Support\Facades\Validator;
...
public function boot()
    {
        Validator::extend('alpha_spaces', function($attribute, $value)
        {
            return preg_match('/^[\pL\s]+$/u', $value);
        });
    }
Ahora hay que registrar este nuevo provider dentro del archivo config\app.php:
        //Custom validation rules
        \App\Providers\CustomValidationRulesProvider::class,
Luego probamos nuestra nueva regla en cualquiera de nuestros formularios o métodos de store():
$this->validate($request,[
            /* ... */
            'location'  =>  'max:100|alpha_spaces',
            /* ... */
        ]);
Y por último agregamos el mensaje correspondiente (error) en caso de que esta nueva regla no se cumpla. Para ello hay que agregarla dentro del archivo /resources/lang/en/validation.php Yo lo puse junto a las reglas "alpha":
    'alpha'                => 'The :attribute may only contain letters.',
    'alpha_dash'           => 'The :attribute may only contain letters, numbers, and dashes.',
    'alpha_num'            => 'The :attribute may only contain letters and numbers.',
    'alpha_spaces'         => 'The :attribute may only contain letters and spaces.',
Listo. Referencias: http://blog.elenakolevska.com/laravel-alpha-validator-that-allows-spaces/

Salud 2 🍸!

Laravel: Cómo validar entradas de sólo letras pero con espacios

En la documentación de Laravel tenemos que se puede validar cadenas ya sea con puras letras, con guiones bajos y medios o sólo alfanuméricas.


  1. alpha
  2. alpha_dash
  3. alpha_num


Pero qué tal si queremos validar, por decir nomás un ejemplo, nombres de ciudades tales cómo "Ciudad de México". Si sólo ponemos "México", con alpha sí pasa la validación, pero si queremos introducir "Ciudad de México", la validación no pasa porque hay espacios.

Para validar sólo letras y con espacios, podemos meter la siguiente regla personalizada:
use Illuminate\Support\Facades\Validator;

        Validator::extend('alpha_spaces', function($attribute, $value)
        {
            return preg_match('/^[\pL\s]+$/u', $value);
        });
Ahora si no sabes dónde poner esa nueva regla en tu Laravel, sigue leyendo aquí: "Laravel: Cómo crear una nueva regla de validación personalizada"

Para probar que esta regla realmente funciona, puedes probarla en regex101.com.

Salud! 🍸

domingo, 2 de julio de 2017

Laravel: autentificar usuario tanto por dirección de correo electrónico email o por nombre de usuario

En términos generales nunca hay que modificar los archivos que estén bajo el namespace de "foundation" 🙈, porque si los modificas, cuando actualices tu Laravel, dichos cambios que hayas hecho, serán borrados 😱 y sustituidos por los nuevos archivos de la actualización en cuestión.

Es mejor hacer las modificaciones un nivel más arriba 🤓, por ejemplo, dentro del archivo de app/http/Controllers/Admin/AdminController.php
Agregamos estas dos funciones al final, las cuales se llamarán igualito a las que se encuentran dentro del trait AuthenticatesUsers.php
Esto hará que Laravel ignore o no tome en cuenta las funciones de autentificación del trait:
//References: https://laracasts.com/discuss/channels/requests/laravel-5-middleware-login-with-username-or-email?page=2
    protected function validateLogin(Request $request)
    {
        $field = filter_var($request->input('email'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        $request->merge([$field => $request->input('email')]);
        $this->validate($request, [
            $field => 'required', 'password' => 'required|string',
        ]);
    }

    protected function credentials(Request $request)
    {
        $field = filter_var($request->input('email'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        return $request->only($field, 'password');
    }
Ahora lo que hay que hacer, si es tu caso, es cambiar la columna de `users`.`name` a `users`.`username`. En mi caso yo cambié o agregué una columna que se llame `username`.

Entonces, ahora dentro de la plantilla de login, simplemente cambié en el input donde dice "Email", le puse "Email / Username" y ya.

Y en la parte superior del menú en donde aparece el nombre del usuario, si hiciste el cambio de nombre de columna a `username`, le puse:
                        
Evidentemente también deberás modificar la lógica del registro, pero igual, no necesitarás hacer cambios sustanciales, dependiendo cómo quieras validar el nombre de usuario, puede ser por un alpha, alpha_dash o alpha_num. y quizás modificar la columna `name` por `username` en register.blade.php

Quizás también te interese leer "Laravel: Cómo validar entradas de sólo letras pero con espacios"

Saludos 🍸.

sábado, 1 de julio de 2017

Solución al error mysql add unique error 1062 Duplicate entry ''

El problema es que, en la columna a la cual se pretende agregar el índice Unique, tiene valores vacíos no nulos, es decir, en vez de NULL, tiene espacios ' '.
La solución es que llenes con información (correspondiente) las columnas con espacios o valores vacíos (no nulos, sin NULL, más bien "   ").

Saludos
 

Acerca de mí

Mi foto
I'm a computer engineer and polyglot =) i speak: Spanish, English, French, Swedish, Russian, and German. I like to dance bachata and kizomba. i have worked as an interpreter, guide, and tourist guide. At the moment i work as a computer engineer, and consultant. Visit my travel and photography blog on: http://surlaroute.com.mx/ ☺ And our street style from Mexico: http://streetstyle.mx

Tags