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/

lunes, 12 de septiembre de 2016

Instalar Laravel 5.3

Para instalar un nuevo proyecto en Laravel en Homestead primero debemos haber iniciado la maquina virtual. Si no lo instalaste entra aquí.




Debemos modificar el sites: de Homestead.yaml

Sites:

- map: proyecto1.local.com
  to: /home/projects/proyecto1/public

Y agregar al hosts la nueva url mapeada

192.168.10.10 proyecto1.local.com

Luego debemos lanzar la maquina virtual debemos movernos por la terminal al directorio de Homestead. Donde esta el VagrantFiles.

Ahi ejecutamos el comando:

     vagrant provision

Este comando actualizara nuestro box de homestead con los datos nuevos

Y ahora levantamos la maquina:

     vagrant up

Y una vez inicializada, insertamos:

     vagrant ssh

Con este comando entraremos dentro de nuestra maquina virtual

Una vez ahí nos situamos en la carpeta Code (esto si no lo cambiaste a gusto)

Básicamente como cualquier terminal nos movemos con cd Code, tené en cuenta que estas bajo un ubuntu
Y por ultimo queda instalar el proyecto nuevo dentro de la carpeta Code (recorda que esta carpeta esta clonada con una en tu Carpeta personal)

Ejecutamos:

     composer create-project --prefer-dist laravel/laravel proyecto1

Estamos listos, podemos revisar nuestra carpeta Code, dentro la Caperta Personal (En Ubuntu) y veremos nuestro proyecto1creado y listo para empezar a desarrollar.

Un saludo, Cidius

domingo, 11 de septiembre de 2016

Instalar Homestead

Voy a ser practico, no muy descriptivo. El objetivo sera que puedas tener andando Homestead rapidamente.

Aqui les dejo la documentacion Oficial de instalacion de Homestead

-Paso I: Descargas

Descargar VirtualBoxVagrant y Composer

El orden de instalación seria el mismo de descarga, aunque no estoy seguro si varia mucho

Aqui igual utilizare Git para clonar los repositorio.

insertar en la terminal: sudo apt-get install git

-Paso II:

Todos los pasos que describo seran para ubuntu, pero si estas en windows, te recomiendo que uses la consola Git Bash, te hara la vida mas facil.

Insertar en la terminal:

vagrant box add laravel/homestead

-Paso III: clonar el repositorio Homestead

git clone https://github.com/laravel/homestead.git Homestead

Veremos que en nuestra carpeta personal se ha creado una carpeta Homestead

Nos dirigimos a esta carpeta desde la terminal (cd Homestead) y ejecutamos

bash init.sh

Nos dara un aviso de que Homestead esta inicializado

Sobre el directorio ~/.homestead,  podemos insertar este linea en la terminal o buscarlo como oculto en la carpeta personal (apretando Ctrl + H).

Dentro de el veremos que hay tres archivos, el importante para nosotros es Homestead.yaml

Si lo abrimos nos encontramos con un monton de configuraciones que utilizaremos.

Paso IV: Crear la llave SSH

Ejecutamos: 

ssh-keygen -t rsa -C "you@homestead"

Aqui recomiendo dejar en blanco todo (dar ENTER hasta deje de pedirnos)

Paso V: Configurar nuestras carpetas clonadas

Si vemos el contenido de Homestead.yaml vemos que tiene esto:

folders: 

- map: ~/Code 
  to: /home/vagrant/Code

Esto quiere decir rápidamente que la carpeta Code de la maquina virtual estará mapeada en una carpeta Code de nuestra carpeta personal.
Esto quiere decir que si modificamos algo dentro de nuestra virtualizacion, se modificara en nuestra carpeta fuera y viceversa.

Por eso vamos a crear una carpeta Code dentro de nuestra carpeta personal

Paso VI: Configurar nuestros Host

tenemos lo siguiente dentro de Homestead.yaml


sites: 
 - map: homestead.app 
   to: /home/vagrant/Code/Laravel/public

Aqui podemos ver el dominio virtual que utilizara mi proyecto y la carpeta donde estara alojado


Por ejemplo si mi proyecto se llama facebook podemos agregar otro nuevo


sites: 
 - map: homestead.app 
   to: /home/vagrant/Code/Laravel/public 
 - map: facebook.com 
   to: /home/vagrant/Code/facebook/public
Luego vamos al archivo hosts

En ubuntu esta en: /etc/hosts
en windows en C:\Windows\System32\drivers\etc\hosts

y agregamos nuestro nuestra direccion

192.168.10.10 facebook.com

Paso VII:

-Luego de terminar de instalar el BOX
-Lanzar la maquina desde el dir maestro (carpeta Homestead

vagrant up

-Una vez lanzada la maquina (demora la primera vez) 
 podemos pasar a instalar Laravel

¿Que es Homestead?

Laravel Homestead es el box de vagrant oficial para Laravel, es un paquete oficial el cual nos brinda un ambiente lo más cercano posible a un entorno de desarrollo solo que en nuestra propia máquina local, con la finalidad de que no tengamos que estar pendiente de versiones compatibles de So, de php o mysql o cualquier otra cosa que necesitemos.

Es bastante practico de instalar o desechar incluso, si algo sale mal, podemos borrar el paquete y volver a instalarlo para seguir trabajando si es necesario. A mi la verdad no me ha pasado.

Laravel Homestead, a grandes rasgos, es una máquina virtual con un Ubuntu y que tiene instaladas varias herramientas que nos serviran para el desarrolo, es decir, ya están pre-cargadas para no preocuparnos por instalar software que probablemente vayamos a utilizar, tales como lo son:
  • Ubuntu 16.04
  • Git
  • PHP 7.0
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (With PM2, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
En mi caso particular empece trabajando en windows y logre hacerlo andar sin problemas. No soy muy linuxero, o no lo era. Ahora no salgo de Ubuntu jeje.

Me fui dando cuenta que es mas fácil trabajar en linux, pero que muchas buenas practicas y comandos son para terminales de linux. No es fundamental, se puede trabajar  igual en windows, porque básicamente esa es la idea de Homestead, pero si queres experimentar nuevos retos o sos curioso, te va interesar entrar en el mundo de software libre

En otro post mostrare como instalar este entorno.
Por ultimo cabe destacar que no es necesario tener instalado Homestead para utilizar Laravel. Pero por mi experencia es clave.

Un saludo. Cidius

sábado, 10 de septiembre de 2016

¿Por que Laravel?

Hola, si entraste a este post es porque al igual que a mi, te paso de querer montar una sitio web y te pusiste a investigar y te encontraste o alguien te nombro la palabra FRAMEWORK. 

Te hablare absolutamente desde mi experiencia en esto ( la cual es muy poca). Pero justamente en muchos casos todos empezamos asi ¿no?

En principio, vengo de desarrollar siempre en C/C++, Java y Android. Tengo los conocimientos de POO, pero nunca desarrolle en HTML y PHP. Asi que era un novato absoluto... ¿Ya no lo soy? Lo sigo siendo y espero no dejar de serlo nunca, porque sino dejamos de seguir buscando.

Hay un monton de framework, para todos los gustos y colores. En mi caso hice una investigacion rapida y me encontre con los 3 mas recomendados en la red.


2) Yii 2


Symphony lo descarte bastante rapido por todos los comentarios, de que su curva de aprendizaje era lenta y larga. Si bien se puede desarrollar a nivel empresariales. A mi me interesaba hacer un proyecto bastante pequeño y seria una perdida de tiempo

Asi que entre los otros 2 una corazonada y ademas de que se hablaba que Laravel tiene buena documentación y una gran comunidad. Termine eligiéndolo

Tuve la mala suerte por ahi,"mala mia", de embarcarme en este framework en una etapa de transición entre la version 5.2 y la 5.3. Lo cual en algunas cosas que surgieron nuevas me encuentro a la deriva, pero esto hizo que investigara mas y aprendiera mas. Y lo que me llevo a crear este blog para documentar mis logros y aprendizajes

Tuve mi momento de duda y de lanzar Laravel a la papelera, fue cuando probe YII2 y en no mas de un par de horas me di cuenta lo buenísimo que era laravel. Su documentación, la oficial esta en ingles pero es bastante simple de leerla aun no dominando el idioma, la comunidad es gigante y hay mucho en nuestro idioma. En definitiva siempre hay una salida, y cuanto mas dura sea la solucion mas sabrosa es cuando la encontramos

Mis destacados:

-Me parecio hasta ahora un framework completo, tiene herramientas, paquetes que facilitan la creacion de codigo rapido. No es dificil de aprender para nada

-Existe y uso Homestead que es un paquete completo que provee Laravel, que junto a virtual box, hacen que no importe que sistema operativo utilices siempre es lo mismo

-La Documentacion: Oficial y No oficial(En nuestro idioma)

-La comunidad es enorme, en youtube hay cantidad de guias, tutoriales y demas -  es.stackoverflow.com es lo mejor del mundo


No estoy aqui convencerte de Laravel que es mejor, solo para darte mi experiencia

Un Saludo