La potencia de los comandos de Artisan, para aquellos que ya entienden algo de Laravel, es indiscutible.
Artisan posee un conjunto de comandos, que permiten que pueda aprovecharse muy bien su capacidad. Para listar estos comandos basta con escribir en la consola
php artisan list
e inmediatamente obtendremos:
Las opciones que disponibles con cada comando, pueden obtenerse mediante help:
php artisan help nombre-comando
o acortando simplemente con -h:
php artisan nombre-comando -h
Así obtendremos: la forma de usar el comando, sus argumentos , una descripción y las opciones que podemos agregar. Por ejemplo, para php artisan migrate -h nos muestra:
Aquí nos está
diciendo dice que “mígrate” es el comando para correr las migraciones y entre
las opciones con que cuenta está poder indicar cuál es la base de datos por
ejemplo php artisan migrate –database=tests .
Una de las grandes ventajas de esta herramienta es que tiene un conjunto de comandos dedicado a generadores, es decir, que nos permiten crear elementos como controladores, middleware, seeders, modelos, entre otros, los cuales son los que están bajo la categoría make:
Cada uno de
esos generadores tiene sus propias opciones, así que puedes revisarlo con el
comando help.
Artisan nos permite crear controladores sin métodos, mediante el uso de la opción plain:
Abajo muestro una lista de algunos de los comandos de uso más común.
Serve:
php artisan serve
Se utiliza para lanzar el servidor de una aplicación, corriéndolo desde el root de nuestra app.
Este servidor viene incluido en laravel y se levanta de modo individual para cada caso. Después de cargarlo, nos indicará donde está corriendo.
laravel development server started on http://localhost:8000/
Si vamos al
navegador, y visitamos http://localhost:8000/, veremos nuestra aplicación corriendo.
Para detener el servidor, utilizaremos la combinación de las teclas Ctrl+C.
Cambiar el namespace de la aplicación:
php artisan app:name nombre-namespace
Ver el listado completo de rutas:
php artisan route:list
Como resultado
nos mostrará un listado de todas las rutas de la aplicación, con la información
sobre el método HTTP, la URI, la acción, el nombre y sus middlewares.
Poner en modo mantenimiento nuestra aplicación:
php artisan down
Sacar la aplicacion del modo mantenimiento
php artisan up
Artisan además
asimila crear comandos, lo cual es muy útil para ejecutar tareas manuales o
testear comportamientos.
En el siguiente ejemplo tenemos el modelo Role y el modelo User, y estamos mostrando en una vista, la relación entre ambos de forma descendente, según la fecha en que fue creado, en grupos de 15, por página.
class Role extends Model
{
public function users()
{
return $this->belongsToMany('Role\User')->withTimestamps();
}
}
@if ($roles->users->count() > 0)
Asignación
@foreach ($roles->users()->orderBy('rol_user.created_at', 'desc')->take(15)->get() as $user)
...
@endforeach
@endif
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.
Manejando algo del código, podemos emplear Auth con el uso de modelos, y crear un sistema de autenticación mediante el uso de sus relaciones, lo cual reforzará la seguridad de nuestra web.
Ver Como Instalar Laravel En el ejemplo siguiente, creamos una función managePages(), dentro de la clase AdminPolicy, que nos indica una determinada condición para el usuario que intenta acceder, en este caso limita su uso solo a aquellos con los roles Admin y Editor. Luego declaramos su validez dentro de Providers, específicamente en el constructor del AuthServiceProvider. Para esto lo que hacemos es pasarle la ruta exacta del GateContract y una variable que nos traerá los datos del user. Con el uso de un foreach le damos un valor dinamico al acceso.
// app/Policies/AdminPolicy.php
class AdminPolicy
{
public function managePages($user)
{
return $user->hasRole(['Admin', 'Editor']);
}
}
// app/Providers/AuthServiceProvider.php
public function boot( \Illuminate\Contracts\Auth\Access\GateContract $gate)
{
foreach (get_class_methods(new \App\Policies\AdminPolicy) as $method) {
$gate->define($method, \App\Policies\AdminPolicy::class . "@{$method}");
}
$this->registerPolicies($gate);
}
Luego en cada uno de los espacios donde necesitamos acceder, colocamos una clausula de acceso, que llamara a la clase que hemos creado.
Si recibes este error: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`)), aplica esta soluci
Dentro de App/Providers ir a AppServiceProvider y corregir la función boot
public function boot()
{
//
}
Por
use Illuminate\Support\Facades\Schema; // añadir facade Schema
public function boot()
{
// corrigiendo error …….
Schema::defaultStringLength(191);
}
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.
Es sabido que crear el recurso de autenticación en nuestra nueva aplicación es uno sino el primer paso después de crear el proyecto, aquí les dejo una pequeña explicación de los pasos que sigo para hacerlo, tanto en local como en produccion si trabajamos en un plesk, y no queremos hacer deployment local, sino directamente arriba
Local:
En laravel 5 seria
php artisan make:auth
En laravel 6 seria
composer require laravel/ui
Se creara automáticamente el comando ui/auth, dentro de artisan, lo ejecutamos:
php artisan ui vue --auth
luego ejecutamos
npm install && npm run dev
PLESK:
En laravel 5 seria
cd httpdocs/nombre_proyecto && /opt/plesk/php/7.3/bin/php artisan make:auth
Algunas de la cosas que nos reserva Laravel dentro de Eloquent, son las modificaciones en el modelo, que podemos hacer directamente sobre él para modificarlo.
class User extends Model {
// la tabla enlazada
protected $table = 'users';
// los campos que pueden ser llenados con el método create()
protected $fillable = ['email', 'password'];
protected $dates = ['created_at', 'deleted_at'];
// los campos protegidos
protected $appends = ['field1', 'field2'];
// valores adicionales que pueden ser retornados en un JSON
}
protected $primaryKey = 'uuid'; // cambiar el idf
public $incrementing = false; // que no sea autoincrementable
protected $perPage = 25;//sobreescribir la paginación por defecto de 15
const CREATED_AT = 'creado_en';
const UPDATED_AT = 'actualizado_en'; // sobre escribir los timestamp
public $timestamps = false; // no usar los timestamp
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.
Parte de la magia de este framework , es que podemos realizar búsqueda por incrementos y decremento en Laravel, aprovechando las funciones que nos ofrece Eloquent. Esto puede sernos de mucha utilidad si asignamos valores por ejemplo a los usuarios, por participación y queremos obtener los movimientos en esos valores.
Veamos un ejemplo: En el caso siguiente asignamos inicialmente 50 puntos a cada cliente y luego obtenemos del modelo aquellos que incrementan los puntos y los que los pierden.
Otro modo de utilizar incrementos y decrementos es aplicándolo directamente a la variable que representa al modelo por ejemplo en vez de escribir algo como:
$productos = Producto::find($productos_id);
$productos ->read_count++;
$productos ->save();
Incrementamos o decrecemos directamente asi:
$productos = Producto::find($productos_id);
$productos ->increment('read_count');
O directamente en el modelo
Producto::find(productos_id)->increment('read_count');
Producto::find(productos_id)->increment('read_count', 5); // sumo 5
Producto::find(productos_id)->decrement('stock'); // resto 1
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.
Por si lo necesitamos, debemos saber que Laravel nos permite añadir propiedades mutacionales, que nos permitan por ejemplo obtener el nombre completo de los clientes, aunque los tengamos separados en la base de datos por apellidos y nombre.
La cual llamaremos luego desde el modelo Cliente y con el uso de append, podemos añadirla.
class Cliente extends Model
{
protected $appends = ['nombre_completo'];
}
Sin embargo no termina ahí, si quisiéramos organizar a los clientes por el nombre completo no podríamos, o sea no podemos hacer esto:
$clientes = Cliente::orderBy('nombre_completo')->get();
Pero si organizamos los datos luego de cogerlos, con sortBy si funciona, o sea:
$clients = Client::get()->sortBy('nombre_completo');
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.