Skip to content

Instantly share code, notes, and snippets.

View paulofreitas's full-sized avatar

Paulo Freitas paulofreitas

  • I'm my own boss
  • Brazil
  • 17:45 (UTC -03:00)
View GitHub Profile
@paulofreitas
paulofreitas / HasCompositeKey.php
Last active June 24, 2017 00:19
Trait to enable the use of composite keys with Eloquent
<?php
namespace App\Entities;
use UnexpectedValueException;
use Illuminate\Database\Eloquent\Builder;
trait HasCompositeKey
{
/**
<?php
// Supondo que o formulário tenha um campo <input type="file" multiple /> chamado "images"
collect($request->images)->each(function ($image) {
// gera nome único para arquivo automaticamente (ex: 72237093253032091088276430939206.jpg) e salva na raiz
$filename = $image->storePublicly('.', 's3');
// usa nome original do arquivo, salva numa "pasta" para o artigo (ex: articles/3/cover.png)
$filename = $image->storePubliclyAs($image->getClientOriginalName(), "articles/{$article_id}", 's3');
<?php
class PostController
{
public function __controller(PostRepository $postRepository)
{
$this->postRepository = $postRepository;
}
public function index()
@paulofreitas
paulofreitas / VS Code.md
Last active August 1, 2022 04:55
My Visual Studio Code setup
@paulofreitas
paulofreitas / nginx-vhost-www.conf
Last active May 17, 2017 17:13
Nginx virtual host sample
server {
listen 80;
server_name www.dominio.com.br;
return 301 $scheme://dominio.com.br$request_uri;
}
<?php
// Requires Laravel
$json = <<<JSON
[{"name": "Taylor Otwell",
"country": {
"name": "United States"
}
},
<?php
$xml = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<Person>
<Name>{name}</Name>
<Age>{age}</Age>
<Gender>{gender}</Gender>
</Person>
XML;
@paulofreitas
paulofreitas / DatabaseTokenRepository.php
Last active April 6, 2017 03:00
Rollbacks Laravel's 5.4 password reset tokens patch (PR #16850: https://github.com/laravel/framework/pull/16850)
<?php // app/Support/Auth/Passwords/DatabaseTokenRepository.php
namespace App\Support\Auth\Passwords;
use Carbon\Carbon;
use Illuminate\Auth\Passwords\DatabaseTokenRepository as BaseRepository;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Auth\Passwords\TokenRepositoryInterface as RepositoryContract;
class DatabaseTokenRepository extends BaseRepository implements RepositoryContract
@paulofreitas
paulofreitas / post-laravel-estendendo-componentes-atraves-do-decorator-pattern.md
Created April 4, 2017 18:29
Laravel: Estendendo componentes através do Decorator pattern

Suponha que você tenha um pacote para aplicações Laravel ou ainda um módulo de sua aplicação que é desenvolvido independente dela.

Como tratar em seu próprio pacote/módulo determinadas exceções que o framework ou a aplicação podem gerar, substituindo o exception handler deles quando for conveniente e ao mesmo tempo delegando a eles exceções que você não irá tratar? 🤔

Aplicando o Decorator pattern. 😄

Observe esta implementação de pacote:

src/Exceptions/Handler.php

@paulofreitas
paulofreitas / post-laravel-flexibilizando-a-configuracao-de-ambiente.md
Created April 4, 2017 17:02
Laravel: Flexibilizando a configuração de ambiente

A configuração de ambiente é um tópico que mudou consideravelmente entre as versões 4.2, 5.0 e 5.1 do Laravel. Nessa evolução algumas coisas mudaram e infelizmente a documentação não necessariamente acompanhou as novidades de flexibilização de configuração.

Uma coisa que está documentada mas não é necessariamente explícita/clara é a possibilidade de compartilhar uma mesma aplicação em mais de um ambiente de configuração.

Imagine que você queira compartilhar uma aplicação para o ambiente de homologação (staging) e produção (production) apenas trocando as configurações de ambiente com base no domínio servido. Nos tempos do Laravel 4.x isso era configurado através de um recurso do próprio framework. Como você faria isso hoje? 🤔

Usando diferentes arquivos .env por ambiente, de modo que você pode ter um .env.staging para a homologação, um .env.production para a produção, um .env.testing para testes, etc. 😀

Mas como definir qual o ambiente que está sendo usado? Através da variável