Como crear un Trait en Laravel

Un trait sirve principalmente para reusar un código que ha está escrito en la aplicación web.

Para ello vamos a crear una carpeta Traits para ubicar todos los trait, en el raíz del proyecto.

Y como ejemplo crear un fichero token.php, al cual se llama tanto desde el controlador de login como desde el controlador de registro.

app\Traits\token.php

Índice
  1. Definir un trait
  2. Utilizar el Trait generado

Definir un trait

Lo primero es iniciar el código con la apertura de una etiqueta php.

Segundo indicar el namespace donde se va a utilizar el trait.

Tercero crear la función o funciones a las que se va a acceder, además de las librerías a usar en la función.

<?php

namespace App\Traits;

use Illuminate\Support\Facades\Http;

trait Token{

 public function getAccessToken($user, $service){
  $response = Http::withHeaders([
   'Accept' => 'Application/json'
  ])->post(env('APP_URL_API') . 'oauth/token', [
   'grant_type' => 'password',
   'client_id' => config('services.apiamzn.client_id'),
   'client_secret' => config('services.apiamzn.client_secret'),
   'username' => request('email'),
   'password' => request('password'),
  ]);

  $access_token = $response->json();

  $user->accessToken()->create([
   'service_id' => $service['data']['id'],
   'access_token' => $access_token['access_token'],
   'refresh_token' => $access_token['refresh_token'],
   'expires_at' => now()->addSecond($access_token['expires_in'])
  ]);

 }

}

Utilizar el Trait generado

El trait anterior puede utilizarse en cualquer parte del proyecto, y en este ejemplo se va a utilizar en los controladores de login y registro de usuarios.

app\Http\Controllers\Auth\AuthenticatedSessionController.php
app\Http\Controllers\Auth\RegisteredUserController.php

Importar el trait, ademas de invocarlo dentro de la clase y llamar al método definido.

...

use App\Traits\Token;

class RegisteredUserController extends Controller
{
 use b;

...

$this->getAccessToken($user, $service);

...

Puedes seguir viendo cómo crear un cliente para API RESTful con laravel.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir