0

I'm building a complete crud using laravel + angularjs, but I have problems in the "edit" part.

It's an internal server error, so I don't know what it means and I need help.

Error "GET localhost/crudtcc/public/api/v1/colaboradores/editar/3 500 (Internal Server Error)"

the javascript file:

app.controller('colaboradoresController', function($scope, $http, API_URL) {

  $http.get(API_URL + "colaboradores")
    .success(function(response) {
      $scope.colaboradores = response;
    });

  $scope.toggle = function(modalstate, id_colaborador) {
    $scope.modalstate = modalstate;

    switch (modalstate) {
      case 'add':
        $scope.form_title = "Novo colaborador";
        $scope.colaborador = null;
        break;
      case 'edit':
        $scope.form_title = "Dados do colaborador";
        $scope.id_colaborador = id_colaborador;

        $http.get(API_URL + 'colaboradores/editar/' + id_colaborador)
          .success(function(response) {
            console.log(response);
            $scope.colaborador = response;
          });
        break;
      default:
        break;
    }

    $('#myModal').modal('show');
  }

  $scope.save = function(modalstate, id_colaborador) {
    var url = API_URL + "colaboradores/salvar";

    if (modalstate === 'edit') {
      url += "/editar/" + id_colaborador;
    }

    $http({
      method: 'POST',
      url: url,
      data: $.param($scope.colaborador),
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }).success(function(response) {
      console.log(response);
      location.reload();
    }).error(function(response) {
      console.log(response);
      alert('Um erro ocorreu. Check a log para mais detalhes.');
    });
  }

  $scope.confirmDelete = function(id_colaborador) {

    var isConfirmDelete = confirm('Tem certeza que deseja excluir o registro?');
    if (isConfirmDelete) {
      $http({
        method: 'DELETE',
        url: API_URL + 'colaboradores/remover/' + id_colaborador
      }).
      success(function(data) {
        console.log(data);
        location.reload();
      }).
      error(function(data) {
        console.log(data);
        alert('Falha na exclusão');
      });
    } else {
      return false;
    }
  }

});

the routes file:

    <?php

       namespace App\Http\Controllers;
    $colaborador = new Colaborador;

 use Illuminate\Http\Request;
 use App\Http\Requests;
 use App\Usuario;
 use App\Http\Controllers\Controler;
 use App\Colaborador;

class Colaboradores extends Controller
{
public function index()
{
       return Colaborador::orderBy('id_colaborador', 'asc')->get();
}

public function salvar(Request $request)
{
    $colaborador->nome = $request->input('nome');
    $colaborador->rg = $request->input('rg');
    $colaborador->orgao_expedidor = $request->input('orgao_expedidor');
    $colaborador->cpf = $request->input('cpf');
    $colaborador->estado_civil = $request->input('estado_civil');
    $colaborador->sexo = $request->input('sexo');
    $colaborador->nome_pai = $request->input('nome_pai');
    $colaborador->nome_mae = $request->input('nome_mae');
    $colaborador->naturalidade = $request->input('naturalidade');
    $colaborador->data_nascimento = $request->input('data_nascimento');
    $colaborador->login = $request->input('login');
    $colaborador->senha = $request->input('senha');
    $colaborador->siape = $request->input('siape');
    $colaborador->pis = $request->input('pis');
    $colaborador->rua = $request->input('rua');
    $colaborador->numero = $request->input('numero');
    $colaborador->bairro = $request->input('bairro');
    $colaborador->cidade = $request->input('cidade');
    $colaborador->estado = $request->input('estado');
    $colaborador->cep = $request->input('cep');
    $colaborador->telefone_fixo = $request->input('telefone_fixo');
    $colaborador->telefone_celular= $request->input('telefone_celular');
    $colaborador->telefone_comercial = $request->input('telefone_comercial');
    $colaborador->email = $request->input('email');


    $colaborador->save();

    return 'Colaborador salvo com sucesso! ID: ' . $colaborador->id_colaborador;

}

public function update(Request $request,$id_colaborador)
{
    $colaborador = Colaborador::find($id_colaborador);

    $colaborador->nome = $request->input('nome');
    $colaborador->rg = $request->input('rg');
    $colaborador->orgao_expedidor = $request->input('orgao_expedidor');
    $colaborador->cpf = $request->input('cpf');
    $colaborador->estado_civil = $request->input('estado_civil');
    $colaborador->sexo = $request->input('sexo');
    $colaborador->nome_pai = $request->input('nome_pai');
    $colaborador->nome_mae = $request->input('nome_mae');
    $colaborador->naturalidade = $request->input('naturalidade');
    $colaborador->data_nascimento = $request->input('data_nascimento');
    $colaborador->login = $request->input('login');
    $colaborador->senha = $request->input('senha');
    $colaborador->siape = $request->input('siape');
    $colaborador->pis = $request->input('pis');
    $colaborador->rua = $request->input('rua');
    $colaborador->numero = $request->input('numero');
    $colaborador->bairro = $request->input('bairro');
    $colaborador->cidade = $request->input('cidade');
    $colaborador->estado = $request->input('estado');
    $colaborador->cep = $request->input('cep');
    $colaborador->telefone_fixo = $request->input('telefone_fixo');
    $colaborador->telefone_celular= $request->input('telefone_celular');
    $colaborador->telefone_comercial = $request->input('telefone_comercial');
    $colaborador->email = $request->input('email');
    $colaborador->save();

    return "Sucesso atualizando Colaborador #" . $colaborador->id_colaborador;
}

public function remove(Request $request, $id_colaborador)
{   
    $colaborador = Colaborador::where("id_colaborador", $id_colaborador);

    $colaborador->delete();

    return "Colaborador #". $request->input('id_colaborador'). " excluido com sucesso!";
}

public function editar($id_colaborador)
{
    return Colaborador::where("id_colaborador", $id_colaborador);
}



}
?>

and the routes file...

                                <?php

                        /*
                        |--------------------------------------------------------------------------
                        | Application Routes
                        |--------------------------------------------------------------------------
                        |
                        | Here is where you can register all of the routes for an application.
                        | It's a breeze. Simply tell Laravel the URIs it should respond to
                        | and give it the controller to call when that URI is requested.
                        |
                        */
                        Route::get("/colaboradores/gercolaboradores",
                                function() {
                                return view("/colaboradores/gerenciarcolaboradores");
                        });

                        Route::get("/api/v1/colaboradores/","Colaboradores@index");

                        Route::get("/api/v1/colaboradores/editar/{id_colaborador}","Colaboradores@editar");

                        Route::post('/api/v1/colaboradores/salvar/editar/{id_colaborador}',
                                    'Colaboradores@update');

                        Route::post('/api/v1/colaboradores/salvar',     'Colaboradores@salvar');

                                 Route::delete('/api/v1/colaboradores/remover/{id_colaborador}',                      'Colaboradores@remove');


                        ?>
Aleksey Solovey
  • 4,034
  • 3
  • 12
  • 31

1 Answers1

0

You should write your request on Angular side as:

$http.post(API_URL + 'colaboradores/editar/' + id_colaborador, {YOUR_DATA})
                .success(function(response) {
                    console.log(response);
                    $scope.colaborador = response;
                });

and pass the parameters you want to send to backend. Please refer to: https://docs.angularjs.org/api/ng/service/$http.

Explanation: you're using angular GET

$http.get(API_URL + 'colaboradores/editar/' + id_colaborador)

and you defined your route in Laravel as POST

Route::post('/api/v1/colaboradores/salvar/editar/{id_colaborador}',
                                'Colaboradores@update');

GET is not passing any data except trough url, and you're trying to get that data as if you've sent it trough POST request. You can find a short explanation on GET and POST requests on the following links: http://www.w3schools.com/tags/ref_httpmethods.asp and What is the difference between POST and GET?

Community
  • 1
  • 1
boroboris
  • 1,146
  • 1
  • 15
  • 26