Update form registration with photo Laravel

1

It is as follows, I have a file system in laravel, in the edit part, the form loads the fields filled with the photo, if I click update and do not choose an image file again the error appears: " Call to a member function getClientOriginalExtension () on null ".

CONTROLLER

public function  detalhes($id, Request $request){
    $data = array();
    $data["lista"] = \App\Curso::all();
    try{
        $alu = \App\Aluno::find($id);
        if($request->isMethod("POST")){

            $matricula = $request->input("matricula", "");
            $nome = $request->input("nome", "");
            $telefone = $request->input("telefone", "");
            $sexo = $request->input("sexo", "");
            $email = $request->input("email", "");
            $endereco = $request->input("endereco", "");
            $bairro = $request->input("bairro", "");
            $cep = $request->input("cep", "");
            $cidade = $request->input("cidade", "");
            $estado = $request->input("estado", "");
            $idcurso = $request->input("idcurso", "");

            $file = $request->file("foto");
            $ext = $file->getClientOriginalExtension();
            $size = $file->getSize();

            if($ext != "jpg" && $ext != "png" && $ext != "jpeg"){
                $data["resp"] = "<div class='alert alert-info'>"
                        . "Escolha uma IMAGEM valida</div>";
                //2MB
            }else if($size > (1024 * 1024 * 2)){
                $data["resp"] = "<div class='alert alert-info'>"
                        . "Tamanho da imagem invalido</div>";
            }else{

            $fileName = "ft_" .date('YmdHis').".".$ext;

            $alu->matricula = $matricula;
            $alu->nome = $nome;
            $alu->telefone = $telefone;
            $alu->sexo = $sexo;
            $alu->email = $email;
            $alu->idcurso = $idcurso;
            $alu->foto = $fileName;

            $alu->save();

            $idend = $alu->endereco->idendereco;

            $e = \App\Endereco::find($idend);

            $e->endereco = $endereco;
            $e->bairro = $bairro;
            $e->cidade = $cidade;
            $e->cep = $cep;
            $e->estado = $estado;

            $e->aluno()->associate($alu);

            $e->save();

            $file->move("fotos", $fileName);

            $data["resp"] = "<div class='alert alert-success'>"
                    . "Aluno editado com sucesso!</div>";

            $alu = \App\Aluno::find($id);

            return redirect('admin/buscar.html');
        }


        }
         $data["a"] = $alu;
    } catch (Exception $ex) {
        $data["resp"] = "<div class='alert alert-danger'>"
                . "Operação não realizada</div>";
    }
    return view('aluno/detalhes', $data);
}
    
asked by anonymous 19.12.2017 / 19:29

1 answer

1

When Laravel tries to retrieve an uploaded file and can not, it returns NULL . Therefore, before checking the extent, size or any other information, it is necessary to use a condition to check whether the information is valid.

You can check it this way:

<?php

public function  detalhes($id, Request $request){
    $data = array();
    $data["lista"] = \App\Curso::all();

    try{
        $alu = \App\Aluno::find($id);

        if($request->isMethod("POST")){

            $matricula = $request->input("matricula", "");
            $nome = $request->input("nome", "");
            $telefone = $request->input("telefone", "");
            $sexo = $request->input("sexo", "");
            $email = $request->input("email", "");
            $endereco = $request->input("endereco", "");
            $bairro = $request->input("bairro", "");
            $cep = $request->input("cep", "");
            $cidade = $request->input("cidade", "");
            $estado = $request->input("estado", "");
            $idcurso = $request->input("idcurso", "");

            $file = $request->file("foto");

            /* Caso o usuário não tenha enviado uma nova foto, ignora o trecho abaixo */
            if ($file != null) {
                $ext = $file->getClientOriginalExtension();
                $size = $file->getSize();

                if($ext != "jpg" && $ext != "png" && $ext != "jpeg"){
                    $data["resp"] = "<div class='alert alert-info'>"
                            . "Escolha uma IMAGEM valida</div>";
                    //2MB
                }else if($size > (1024 * 1024 * 2)){
                    $data["resp"] = "<div class='alert alert-info'>"
                            . "Tamanho da imagem invalido</div>";
                }

                $fileName = "ft_" .date('YmdHis').".".$ext;

                $alu->foto = $fileName;
            }


            $alu->matricula = $matricula;
            $alu->nome = $nome;
            $alu->telefone = $telefone;
            $alu->sexo = $sexo;
            $alu->email = $email;
            $alu->idcurso = $idcurso;

            $alu->save();

            $idend = $alu->endereco->idendereco;

            $e = \App\Endereco::find($idend);

            $e->endereco = $endereco;
            $e->bairro = $bairro;
            $e->cidade = $cidade;
            $e->cep = $cep;
            $e->estado = $estado;

            $e->aluno()->associate($alu);

            $e->save();

            // Caso o usuário não tenha enviado uma foto, ignora o trecho abaixo.
            if ($file != null) {
                $file->move("fotos", $fileName);
            }

            $data["resp"] = "<div class='alert alert-success'>"
                    . "Aluno editado com sucesso!</div>";

            $alu = \App\Aluno::find($id);

            return redirect('admin/buscar.html');

        }

        $data["a"] = $alu;

    } catch (Exception $ex) {
        $data["resp"] = "<div class='alert alert-danger'>"
                . "Operação não realizada</div>";
    }

    return view('aluno/detalhes', $data);
}
    
19.12.2017 / 19:45