jueves, 20 de octubre de 2016

Validar campos unicos con Request personalizados cuando se hace un update

Cuando estamos haciendo un formulario de edicion de usuario por ejemplo,y usamos nuestro propio Request. Si tenemos el mail como campo unico. Pero en la edicion no modificamos el mail, nos dira que este ya esta tomado, como hacer para que compruebe si este mail existe pero no con el del usuario editado?

Voy a explicar, para la version anteriores a 5.3.18, que en mi caso fue lo q mas me complico, si no fuera por un groso de Laravel en StackOverFlow, llamado Shaz

esta es la sintaxis:
unique:table,column,except,idColumn

entonces en nuestro Request customizado:

public function rules()
    {
        return
        [
            'name' => 'required|string|min:3|max:60',
            'email' => 'required|email|unique:users,email,' . \Auth::user()->id,
        ];
    }

martes, 18 de octubre de 2016

Abrir un enlace con un boton

Algunos se preguntaran como hacemos para redireccionar una vista sin usan un link.

Asi:

<input type ='button' class="btn btn-warning"  value = 'boton' onclick="location.href = '{{ route('ruta.direccionar') }}'"/>

miércoles, 5 de octubre de 2016

Sluggable: rutas amigables

Los slugs son formas “amigables” de representar el texto de un enlace de tal manera que no se muestren caracteres extraños o variables confusas y que sean entendidos por una persona.
El slug puede contener las palabras clave de un artículo y de esta forma indicarle al lector si la publicación está relacionada con el término de la búsqueda.
Laravel tiene una forma de hacer esto desde el propio framework. Pero yo lo voy a hacer desde un paquete, este me hace practico a todo nivel el uso de rutas amigables, sin tocar mas que el modelo.

El paquete en cuestion es spatie/laravel-sluggable

Para instalarlo, como casi todo paquete, debemos hacer:

     composer require spatie/laravel-sluggable

Bueno básicamente lo que debemos hacer es crear un nuevo atributo en el modelo de dato. llamado slug preferentemente. El cual albergara la ruta amigable. Una vez creado a través de migraciones o como sea. Vamos al modelo.


namespace App; use Spatie\Sluggable\HasSlug; use Spatie\Sluggable\SlugOptions; use Illuminate\Database\Eloquent\Model; class Articulo extends Model { use HasSlug; protected $table = "articulos"; protected $fillable = ['titulo','contenido','slug','visitas']; /** * Get the options for generating the slug. */ public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('titulo') ->saveSlugsTo('slug'); } public static function findBySlugOrFail($slug, $columns = array('*') ) { if ( ! is_null($slug = static::whereSlug($slug)->first($columns))) { return $slug; } throw new ModelNotFoundException; } }

La primer funcion getSlugOptions() es la que genera el slug a partir del titulo y lo guarda en slug dentro de nuestra base de datos (atributo previamente creado en nuestra base)

La segunda funcion servira para buscar un articulo o el objeto que sea, a traves del slug. Funcion clave para el controlador cuando pasemos a la nueva vista seleccionada y pasemos el slug creado como parametro (que es lo que se mostrara en la url)

Entonces. Definiendo una ruta del estilo:

Route::get('/articulos/{slug}', 'FrontController@viewArticulo')
                    ->name('front.view.articulo');

Nos vamos al controlador y podemos manejarlo de la siguiente forma:

public function viewArticulo($slug){ $articulo= Articulo::findBySlugOrFail($slug); $articulo->categoria; $articulo->imagen; $articulo->autor; $articulo->visitas++; $articulo->save(); return view('front/articulo')->with('articulo',$articulo); }

En definitiva se vera asi:

    www.nombredelsitio.com/articulos/nombre-del-articulo

Espero que les sirva.
Un saludo

domingo, 2 de octubre de 2016

Como cambiar el Timezone para manipular la fecha y hora con nuestra ciudad

Si alguna vez te encontraste con el problema de trabajar con eventos. Te puede haber pasado que la hora este desfasada 3, 5, 8 horas. Depende de tu zona horaria

Claro que si utilizas algun paquete como Carbon para la manipulación de la fecha y hora. Y extraes la fecha actual con now() esto lo puedes notar

La forma mas sencilla es buscar el timezone correcto a tu ciudad y reemplazarlo por el default. donde?  en /config/app.php Una vez aqui, Buscamos "timezone" con Ctrl+F. Reemplazamos de esta forma


'timezone' => 'America/Argentina/Buenos_Aires',//'UTC',

En el caso mi ese es el timezone de mi ciudad. Pero eso dependerá de cada lugar donde vos quieras mostrar tu sitio

Para subir archivos en Hosting Compartidos en Laravel 5

¿Qué hacer si tu carpeta pública no se llama “public” sino “public_html”, “httpdocs” u otro nombre?

Que problema trae aparejado esto? Pues intenta subir cualquier tipo de archivo al public y veras. 
A mi me sucedio cuando en mi web cuando queria subir imagenes de algun tipo y no lo hacia. Pero logicamente en mi localhost lo hacia perfecto. Que sucedia? 
Por default la carpeta en laravel es public. Pero no basta con cambiarle el nombre (como tampoco vale cambiar a public el public_html del hosting) 

Lo que debemos hacer es cambiarle el nombre a la carpeta del proyecto (a la que el hosting nos ofrece) y luego registrar el cambio dentro del método register de la clase AppServiceProvider ubicada en: app/Providers/AppServiceProvider


public function register() { $this->app->bind('path.public', function() { return base_path().'/public_html'; }); }

Con esto solucionamos ese problema. Pueden comprobarlo imprimiendo el public_path("algo") en algún controlador y verán la ruta completa con el nuevo public_html