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

Laravel Lumen, rota de post só retorna 500

Estou tentando fazer um post aqui com o Laravel Lumen, porém não funciona de jeito nenhum, já li na documentação, e vi outros exemplos na net, não sei o que pode estar acontecendo aqui. Segue como esta a rota em routes/web.php

$router->group(['prefix' => 'developers'], function() use($router) {
    $router->get('/', 'DeveloperController@index');
    $router->get('/{developerId}', 'DeveloperController@show');
    $router->post('/', 'DeveloperController@create');
});

Já o controller está dessa forma:

public function create(Request $request) {
   $developer = Developer::create($request->all());


    return response()->json($developer);
}

Alguém consegue me ajudar? Caso seja necessário aqui está o fonte do projeto: https://github.com/ThiagoBussola/api-developers

4 respostas

Erro 500 é típico erro do servidor, ou seja, o seu código está dando erro na hora de tratar a requisição.

A chamada é bem simples, ou seja, não tem nem "aparente motivo" de dar errado. Temos que ver duas coisas:

  1. Você está mandando os dados corretamente a partir do front?
  2. Você resolveu o problema do mass assignment? (pelo que eu vi, o seu model não tá fazendo isso).

Se isso não resolver, posta aqui o seu log. Erros 500 aparecem no laravel.log.

Aproveitando, no .env você deveria setar o ambiente de desenvolvimento, que aí mensagens melhores e mais esclarecedoras aparecem na tela.

Então não manjo essa parte ai do mass assignment, vou olhar aqui, vou tentar capturar os erros do servidor, porque to rodando tudo nos container aqui e não estava vendo essa parte

solução!

Acho que era algum problema com o fillable da model, não sei direito a questão que resolveu, mas basicamente exclui a tabela, rodei as migrations de novo e adionei os campos ao $fillable na model.

O que o atributo $fillable de um model determina (em linhas bem gerais) é quais campos você pode inserir/atualizar direto através de um create, por exemplo. Então, no caso abaixo:

$flight = Flight::create([
    'name' => 'London to Paris',
]);

Só será criado uma "instância" de Flight se o Laravel conseguir inserir no banco um registro com um valor no campo name. Pra isso, você precisaria ir lá no model Flight e declarar explicitamente que este campo aceita inserção direta:

class Flight extends Model
{
    protected $fillable = ['name'];
    ...
}

se houver mais campos na mesma situação, saia inserindo estes campos após o name:

protected $fillable = ['name','company','origin'];

Isto é uma forma de proteção do Laravel (contra mass assignment), para que alterações indesejadas de campos sensíveis não ocorram acidentalmente. Quando a gente está começando isso dá muita dor de cabeça, mas depois fica automático.