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

miércoles, 21 de septiembre de 2016

nodejs : Depende: rlwrap pero no es instalable [SOLUCION]

La verdad es que la instalación de NodeJs en ubuntu debería ser bastante directa, pero como siempre para algunos  suertudos  no lo es, no es mi caso(?)

La instalación es con el comando:

      $ sudo apt-get install nodejs

Pero es ahi cuando de pronto... te sale esto:

nodejs : Depende: rlwrap pero no es instalable 

y que obviamente no se pudo instalar.

Bueno la solución luego de insistir y buscar medio la encontré aquí. Aun que no del todo, solo me sirvieron estas tres lineas:

# Fixing broken dependencies ("nodejs : Depends: rlwrap but it is not installable"):

echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list
echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list
apt-get update -q

recuerda que para modificar el source.list tienes q tener privilegios root. Así que antes de insertar las lineas necesitas hacer en tu terminal

  $ sudo su 

Luego de hacer todo esto, si ya le das a:

$ sudo apt-get install nodejs

ademas se instalara el cancer de rlwrap que era instalable

Espero que le sirva a alguien
Un saludo


sábado, 17 de septiembre de 2016

Instalar phpmyadmin con Laravel Homestead

La verdad es que un dato fundamental que me facilito la vida al trabajar en Laravel y la conexion con la base de dato fue tener phpmyadmin en la maquina virtual.

Me he visto varias guias de como instalarlo pero nada fue mas simple como hacerlo a partir de este repositorio grrnikos/pma

Es simple:

-Una vez dentro de la maquina virtual (vagrant ssh), nos movemos a la carpeta Code.

ejecutamos:

     curl -sS https://raw.githubusercontent.com/grrnikos/pma/master/pma.sh | sh

Luego de instalar el paquete. Abrimos /etc/hosts y le agregamos la linea:

     127.0.0.1 phpmyadmin.app

Listo. Vamos a nuestro navegador y entramos a http://phpmyadmin.app:8000/