Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Servidor caindo

Olá, o meu erro começou a acontecer com a informação: "Allowed memory size of 134217728 bytes exhausted". Pesquisei na web e dizia que eu teria que aumentar no php.ini o memory_limit de 128 para 256. Fiz a alteração e agora, toda vez que eu tento usar o postman em qualquer link ele faz o servidor cair e me dá esse erro:

C:\Users\franc\lumen-workspace\api-series>php -S localhost:8000 -t public
[Wed Apr 29 11:58:17 2020] PHP 7.4.4 Development Server (http://localhost:8000) started
[Wed Apr 29 11:58:23 2020] [::1]:51999 Accepted
[Wed Apr 29 11:58:23 2020] [::1]:52000 Accepted
[Wed Apr 29 11:58:23 2020] [::1]:51999 Closed without sending a request; it was probably just an unused speculative preconnection
[Wed Apr 29 11:58:23 2020] [::1]:51999 Closing

agradeço

7 respostas

Fala, Francis. Não aumente seu limite de memória não.

Se você está tentando alocar mais de 128 mega de memória, tem alguma coisa muito errada no código.

Dale professor. não estou conseguindo achar o erro, vou postar os meus códigos

web.php

<?php
use Laravel\Lumen\Routing\Router;
use App\Http\Controllers\SeriesController;
/** @var \Laravel\Lumen\Routing\Router $router */

$router->get('/', function () use ($router) {
    return $router->app->version();
});


$router->group(['prefix' => 'api'], function () use ($router){
    $router->group(['prefix' => 'series'], function() use ($router){
        $router->post('', 'SeriesController@store');
        $router->get('', 'SeriesController@index');
        $router->get('{id}', 'SeriesController@show');
        $router->put('{id}', 'SeriesController@update');
        $router->delete('{id}', 'SeriesController@destroy');
        $router->get('{serieId}/episodios', 'EpisodiosController@buscaPorSerie');
    });

$router->group(['prefix' => 'episodios'], function() use ($router){
    $router->post('', 'EpisodiosController@store');
    $router->get('', 'EpisodiosController@index');
    $router->get('{id}', 'EpisodiosController@show');
    $router->put('{id}', 'EpisodiosControllerr@update');
    $router->delete('{id}', 'EpisodiosController@destroy');
    });

});

baseController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;


abstract class BaseController
{
    protected $classe;

    public function index(Request $request) {


       return $this->classe::paginate($request->per_page);
    }

    public function store(Request $request){

        return response()->json($this->classe::create($request->all()), 201);

    }
    public function show(int $id){
        $recurso = $this->classe::find($id);
        if(is_null($recurso)){
            return response()->json('', 204);
        }
        return response()->json($recurso);
    }

    public function update(int $id, Request $request){

        $recurso = $this->classe::find($id);

        if(is_null($recurso)){
            return response()->json('', 404);
        }

        $recurso->fill($request->all());
        $recurso->save();
        return $recurso;
    }

    public function destroy(int $id){
        $qtdDeRecursosRemovidos = $this->classe::destroy($id);
        if ($qtdDeRecursosRemovidos === 0) {
            return response()->json('', 404);
        }
        return response()->json('', 204);
    }
}

EpisodiosController.php

<?php
namespace App\Http\Controllers;

use App\Episodio;


class EpisodiosController extends BaseController
{
   public function  __construct() {
       $this->classe = Episodio::class;
   }
   public function buscaPorSerie(int $serieId){

      $episodios = Episodio::query()->where('serie_id', $serieId)->paginate();
      return $episodios;
   }
}

Serie.php

<?php
namespace app;

use Illuminate\Database\Eloquent\Model;

class Serie extends Model
{
    public $timestamps = false;
    protected $fillable = ['nome'];
    protected $appends = ['links'];

    public function epsodios(){

        return $this->hasMany(Episodio::class);
    }

    public function getLinksAttribute($links): array
    {
        return [
            'eu_mesmo' => '/api/series/' . $this.id,
            'episodios' => '/api/series/' . $this->id . '/episodios'
        ];
    }
}

Episodio.php

<?php
namespace app;

use Illuminate\Database\Eloquent\Model;

class Episodio extends Model
{
    public $timestamps = false;
    protected $fillable = ['temporada', 'numero','assistido', 'serie_id'];
    protected $appends = ['links'];

    public function series() 
    {
        return $this->belongsTo(Serie::class);
    }

    public function getAssistidoAttribute($assistido): bool
    {

        return $assistido;
    }

    public function getLinksAttribute($links): array
    {
        return [
            'eu_mesmo' => '/api/episodios/' . $this.id,
            'serie' => '/api/series/' . $this->serie_id
        ];
    }
}

Fala, Francis... É muito código pra analisar de olho e achar o erro.

Que rota você tenta executar, com quais parâmetros e qual valor no corpo, faz dar o erro?

qualquer um está dando erro de memória estava testando tudo certo até a parte de que você coloca o "'eu_mesmo' => '/api/episodios/' . $this.id,". começou o erro no teste que fez depois desta parte.

solução!

Opa. $this.id está errado. Corrige pra $this->id e deve funcionar.

Isso aí que você tava fazendo estava causando uma recursividade infinita. Não vou entrar em detalhes, mas provavelmente é esse o erro.

corrigi, mas ainda tem o erro. mas de boa, vou refazer o curso, vai ser até melhor. obrigado professor

Continua dando erro de estouro de memória, Francis?