Skip to content

Instantly share code, notes, and snippets.

View paulofreitas's full-sized avatar

Paulo Freitas paulofreitas

  • I'm my own boss
  • Brazil
  • 05:36 (UTC -03:00)
View GitHub Profile
@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

@paulofreitas
paulofreitas / Handler.php
Last active May 16, 2017 22:28
A custom package/module exception handler that decorates the Laravel's app exception handler. And also a nice introduction to the Decorator and Chain of Responsibility design patterns.
<?php
namespace Package\Exceptions;
use Exception;
use Illuminate\Contracts\Debug\ExceptionHandler as HandlerContract;
class Handler implements HandlerContract
{
/**
@paulofreitas
paulofreitas / HandleCorsMiddleware.php
Created March 30, 2017 23:10
CORS middleware example
<?php
namespace App\Http\Middleware;
class HandleCorsMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
@paulofreitas
paulofreitas / User.php
Last active May 16, 2017 22:05
Self-relationships through pivot tables
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
@paulofreitas
paulofreitas / ValidationServiceProvider.php
Last active March 7, 2017 23:35
Using custom Validator in Laravel
<?php // app/Providers/ValidationServiceProvider.php
namespace App\Providers;
use App\Validation\Validator;
use Illuminate\Support\ServiceProvider;
class ValidationServiceProvider extends ServiceProvider
{
public function boot()
@paulofreitas
paulofreitas / oss-contributions.md
Last active September 22, 2017 15:23
My open-source contributions

My open-source contributions

Bugs/issues reported, pull requests contributed and stuff like that, pushed here and there.

72 contributions so far:

<?php
class GeoJSON
{
public function __construct(string $geojson)
{
$this->_struct = json_decode($geojson);
}
public static function fromString(string $geojson)
@paulofreitas
paulofreitas / transposing_form_input.php
Last active February 22, 2017 05:41
Laravel collection macro to transpose form data extracted from Refactoring to Collections book
<?php
/* Transpose Macro */
Collection::macro('transpose', function () {
$items = array_map(function (...$items) {
return $items;
}, ...$this->values());
return new static($items);
});