Undefined variable: id

Asked

Viewed 632 times

-1

Contextualization

It is necessary for the user to register new locations in the project through the multiple check box. I don’t know how ajax and php process this data.
The image below shows the modal of Localities with the multi-check box. The data on the left are all registered locations and the one on the right are the locations selected by the user (will be the new registered locations). By pressing the save button the data on the right will be saved in the database.

inserir a descrição da imagem aqui

Error:

When editing a project the following error appears:

"Undefined variable:id"

inserir a descrição da imagem aqui

Doubt:

How to take data from new saved project locations and display in multiple check box (on the right side)?

Codes:

Html Page: edita.blade.php - modal with multiple Locality checkbox

  <!--Inicio do modal de Localidades--> 
  <div class="modal fade modal-default" id="modalLocalidade" aria-hidden="true" aria-labelledby="examplePositionCenter"
                 role="dialog" tabindex="-1">
                <div class="modal-dialog modal-center">
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">×</span>
                            </button>
                            <h4 class="modal-title">Localidades</h4>
                        </div>
                        <div class="modal-body">

                            <div class="form-group col-md-18" style="display:flex">

                                <select multiple  class="esq  col-md-6" name="localidadesAtivas" required>
                                    @foreach($localidadesAtivas as $localidadeAtiva)
                                    <option value="{{$localidadeAtiva->id}}" {{$localidadeAtiva->id == $projeto->localidade_id ? 'selected' : ''}}>{{$localidadeAtiva->localidade}}</option>
                                    @endforeach   
                                </select>          

                                <div style="display:flex; flex-direction:column">
                                    <button class="dir">▶</button>
                                    <button class="esq">◀</button>
                                </div>

                                <select multiple class="dir col-md-6" name="localidadesAtivasSelects">
                                @foreach($localidadesProjeto as $localidadeProjeto)
                                <option value="{{$localidadeProjeto->id}}" {{$localidadeProjeto->id == $projeto->localidade_id ? 'selected' : ''}}>{{$localidadeProjeto->localidade}}</option>

                                @endforeach  
                                </select>
                           </div>

                        </div><!--Fim do modal-body-->

                        <div class="modal-footer">
                        <center>
                            <a id="btnSalvar" type="button" class="btn btn-primary cadNovaLocalidade" data-dismiss="modal"  align="center" style="width: 300px; height: 40px">Salvar</a>
                        </center>
                        </div>
                    </div>
                </div>
            </div>
  <!--Fim do modal de Localidades-->  


Project Controlcontroller.php: edit method($id, Request $request)

 <?php

namespace App\Http\Controllers\Admin;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use App\Helpers\helpers;
use App\Models\Projeto;
use App\Models\Setor;
use App\Models\Proponente;
use App\Models\TipoProjeto;
use App\Models\Localidade;
use App\Models\ModalidadeApoio;
use App\Models\LocalidadeProjeto;




class ProjetoController extends Controller
{
    private $projeto;
    private $novoProjeto; 
    public  $flagStatusDoc;  //$autorizaDoc é uma flag que por default é false, se torna verdadeira quando a documentação é aprovada
    public $flagAprovacao; //$flagAprovacao é uma flag que por default é false, se torna verdadeira quando o projeto é aprovado


    //Construtor do projeto
    public function __construct(Projeto $projeto)
     {
         $this->projeto = $projeto;  
         $this->flagStatusDoc = false;  
         $this->flagAprovacao = false;
     }

     //Redireciona os dados do projeto para a página principal
     public function index(Request $request)
     {
         $permissao = verificarPermissao('Projetos');
         $projetos = Projeto::all();
         return view('admin.projeto.index',['projetos' => $projetos, 'permissoesPerfil' => $permissao]); 
     }

    //Este método apresenta o formulário para cadastrar um novo projeto
    public function novo()
    {
        $this->flagStatusDoc = false;
        $this->flagAprovacao = false;

        $setores = Setor::all();
        $proponentes = Proponente::all(); 
        $tipoProjetos = TipoProjeto::all(); 
        $modalidadeApoios = ModalidadeApoio::all();
        $localidades = Localidade::all(); 
        $permissoesAprovacao = verificarPermissao('Aprovação');
        $permissoesJuridico = verificarPermissao('Juridico');
        $permissoesGestaoContrato = verificarPermissao('Gestão Contratos e Convênios');
        $permissoesFinanceiro = verificarPermissao('Financeiro');
        $permissoesOcorrencia = verificarPermissao('Ocorrência'); 
        $permissoesAbas= verificarPermissao('Abas do Projeto'); 
        $permissoesDadosGeraisProj= verificarPermissao('Dados Gerais do Projeto'); 

        return view('admin.projeto.novo',
        ['permissoesAprovacao' =>  $permissoesAprovacao, 'permissoesJuridico' => $permissoesJuridico,
        'permissoesGestaoContrato' =>  $permissoesGestaoContrato , 'permissoesFinanceiro' => $permissoesFinanceiro,
        'permissoesOcorrencia'=> $permissoesOcorrencia, 'permissoesDadosGeraisProj' => $permissoesDadosGeraisProj,
        'permissoesAbas' =>  $permissoesAbas, 'setores' => $setores, 'proponentes' => $proponentes, 
        'tipoProjetos' => $tipoProjetos,'localidades' => $localidades,'modalidadeApoios' => $modalidadeApoios, 
        'flagStatusDoc' => $this->flagStatusDoc , 'flagAprovacao' =>  $this->flagAprovacao 
        ]);
    }

     //Método para a consulta dos projetos
     public function consulta(Request $request){

        $condicoes = [];

        if($request->id != null){
            $condicoes[] = [DB::raw('upper(id)'), 'like', DB::raw('upper("%'.$request->get('id').'%")')];
        }

        if($request->nomeProjeto != null){
            $condicoes[] = [DB::raw('upper(nome_projeto)'), 'like', DB::raw('upper("%'.$request->get('nomeProjeto').'%")')];
        }

        if($request->tipoProcesso != null){
            $condicoes[] = [DB::raw('upper(tipo_processo)'), 'like', DB::raw('upper("%'.$request->get('tipoProcesso').'%")')];
        }

        if($request->dtInicio != null){
            $condicoes[] = ['dt_inicio', '=', $request->input('dtInicio')];
        }

        if($request->dtFim != null){
            $condicoes[] = ['dt_fim', '=', $request->input('dtFim')];
        }

        $request->flash(['ID','nomeProjeto', 'tipoProcesso', 'dtInicio', 'dtFim']);

        $projetos = Projeto::where($condicoes)->orderBy('nome_projeto')->get();
        //$rotas = Route::where($condicoes)->orderBy('rota')->get();
        $permissao = verificarPermissao('Projetos');

        return view('admin.projeto.index',['projetos' => $projetos, 'permissoesPerfil' => $permissao]); 
    }


      //Método para cadastrar os dados gerais do projeto 
      public function cadastro(Request $request, Projeto $projeto)
      {
        $novoProjeto =  $projeto->salvar($request->all());
        return redirect()->route('projeto.edita', $novoProjeto->id)->with('success','Sucesso ao cadastrar');;
      }



     //Método que  redireciona para a página de editar o  Projeto
     public function edita($id, Request $request)
     {  
        $localidadesProjeto = Localidade::join('localidades_projeto', function ($join) {
            $join->on('localidade.id','=','localidades_projeto.localidade_id')
            ->where('localidades_projeto.projeto_id','=', $id); })->distinct()->get(); 

        $projetoAutorizado = Projeto::findOrFail($id);
        $this->flagStatusDoc =   $projetoAutorizado->status_documentacao == 'A' ? true : false;
        $this->flagAprovacao = false;
        $usuarios = User::where('autoriza', '=', 'S')->get();
        $setores = Setor::all();
        $proponentes = Proponente::all(); 
        $tipoProjetos = TipoProjeto::all(); 
        $modalidadeApoios = ModalidadeApoio::all();
        $localidades = Localidade::all(); 
        $localidadesAtivas = Localidade::where('ativo', '=', 'S')->orderBy('localidade', 'asc')->get(); 
        $permissoesAprovacao = verificarPermissao('Aprovação');
        $permissoesJuridico = verificarPermissao('Juridico');
        $permissoesGestaoContrato = verificarPermissao('Gestão Contratos e Convênios');
        $permissoesFinanceiro = verificarPermissao('Financeiro');
        $permissoesOcorrencia = verificarPermissao('Ocorrência'); 
        $permissoesAbas= verificarPermissao('Abas do Projeto'); 
        $permissoesDadosGeraisProj= verificarPermissao('Dados Gerais do Projeto'); 
        $usuarioResponsavel = Auth::user()->name;
        $statusDocumentacao =  $projetoAutorizado->status_documentacao == 'P' ? 'Pendente' : 'Autorizado';
        $userAutorizaDoc = User::findOrFail($projetoAutorizado->usu_autoriza_doc_id); 
        $usuarioAutorizaDoc =   !empty($userAutorizaDoc) ?  $userAutorizaDoc->name : 'Nenhum' ;
        $countLocalidadesProjeto = count(LocalidadeProjeto::where('projeto_id','=',$id)->get());



        return view('admin.projeto.edita', ['projeto' => Projeto::find($id), 'permissoesAprovacao' =>  $permissoesAprovacao, 'permissoesJuridico' => $permissoesJuridico,
                'permissoesGestaoContrato' =>  $permissoesGestaoContrato , 'permissoesFinanceiro' => $permissoesFinanceiro,
                'permissoesOcorrencia'=> $permissoesOcorrencia, 'permissoesDadosGeraisProj' => $permissoesDadosGeraisProj,
                'permissoesAbas' =>  $permissoesAbas, 'setores' => $setores, 'proponentes' => $proponentes, 'tipoProjetos' => $tipoProjetos, 'usuarios' => $usuarios,
                'localidades' => $localidades,'modalidadeApoios' => $modalidadeApoios, 'usuarioResponsavel'=>$usuarioResponsavel,'statusDocumentacao'=>$statusDocumentacao,
                'usuarioAutorizaDoc'=> $usuarioAutorizaDoc,'localidadesAtivas'=> $localidadesAtivas, 'flagStatusDoc' =>$this->flagStatusDoc, 'flagAprovacao' =>  $this->flagAprovacao,
                'countLocalidadesProjeto' =>  $countLocalidadesProjeto, 'localidadesProjeto' => $localidadesProjeto]);
     }

        //Método para atualizar o Projeto
      public function atualiza(Request $request)
      {
        $projeto = Projeto::findOrFail($request->get('numProjeto'));
        $projeto->tipo_processo = $request->get('tipoProcesso');
        $projeto->processo = $request->get('numProcesso');                      
        $projeto->dt_protocolo =  $request->get('dtProtocolo');   
        $projeto->setor_origem_id = $request->get('setor');  
        $projeto->proponente_id = $request->get('proponente'); 
        $projeto->nome_projeto = $request->get('nomeProjeto');
        $projeto->dt_inicio = $request->get('dtInicio');
        $projeto->dt_fim = $request->get('dtFim');
        $projeto->dias_intercalados = $request->get('diasIntercalados'); 
        $projeto->tipo_projeto_id = $request->get('tipoProjeto'); 
        $projeto->modalidade_apoio_id = $request->get('modalidadeApoio'); 
        $projeto->localidade_id = $request->get('localidade'); 
        $projeto->valor_solicitado = $request->get('vlSolicitado');
        $projeto->arquivo_fisico = $request->get('arquivo');
        $projeto->dt_lancamento = \Carbon\Carbon::now();
        $projeto->dt_alteracao = null; 
        $projeto->usu_lancamento_id = auth()->user()->id; //recebe o id do usuário logado
        $projeto->usu_responsavel_id = auth()->user()->id; //recebe o id do usuário logado

        $response =  $projeto->alterar($projeto);  
          if($response['success'])
          {
              return redirect()
                        ->route('projeto.edita',$projeto->id) 
                        ->with('success',$response['message']);
          }else
          {
              return redirect()
                        ->back()
                        ->with('error',$response['message']); 

          }   
      }

        //Método para autorizar a documentação do Projeto
        public function autorizaDocumentacao(Request $request)
        {
            if (!$usuario = User::findOrFail($request->get('idUsuario')))
            return response()->json(['error' => 'Usuário não encontrado'], 404);

            if (!$projeto = Projeto::findOrFail($request->get('numProjeto')))
                return response()->json(['error' => 'Projeto não encontrado'], 404);

              $statusDoc =  $request->statusDoc;

            if (Hash::check($request->get('senha'), $usuario->password)){

                $projeto->status_documentacao = $statusDoc; //muda o status da documentação para "A"
                $projeto->usu_autoriza_doc_id = $usuario->id;//id do usuário que autorizou a documentação

                 // $usuarioAutorizaDocs = $usuario->name; // nome do usuário que autorizou a documentação
                $projeto->save();

                //A variável $statusDoc consulta se o status da documentação está autorizado para o usuário logado
                $statusDoc =  Projeto::where('status_documentacao','=','A','and','usu_responsavel_id','=', Auth::user()->id )->get();
                //A variável $flagStatusDoc é verdadeira se a $statusDoc não for nula caso ao contrário ela é verdadeira
                $this->flagStatusDoc =   $statusDoc !=  null ? true : false;


                return response()
                        ->json(['success' => 'Sucesso ao Autorizar Documentação'], 200); 
            } else {
                return response()
                            ->json(['error' => 'Senha Incorreta'], 422);
            } 
        }



        //Cadastra novas localidades
        public function localidadesAtivas(Request $request, Projeto $projeto)
        {
            $projeto = $projeto->find($request->numProjeto);
            if (!$projeto)
                return response()->json(['error' => 'Projeto não encontrado'], 404);

                $projeto->localidades_projeto()->attach($request->localidadesAtivasSelects);

            return response()
                        ->json([
                            'success' => 'Sucesso ao cadastrar novas localidades'
                            ]);
        }


    //Este método remove o projeto
   public function remove(Request $request)
   {
       $projeto = Projeto::find($request->id);

      if (!$projeto)
       return response()
                ->json(['error' => 'not_found'], 404);

      $response =  $projeto->deletar($projeto);  

      if($response['success'])
      {
       return response()
               ->json(['success' => $response['message']], 200);  

      }else
      {
         // Caso não delete, informa um erro inesperado
       return redirect()
                ->json(['error' => $response['message']], 500);        
      } 
   }
}

Edit method($id, Request $request) inserir a descrição da imagem aqui

  • And what should be the variable id that doesn’t exist?

  • @Andersoncarloswoss, the id variable exists in the following method, but for some reason the Laravel framework does not recognize public Function edita($id, Request $request) voltar $localityProject = Locality::Join('locality_project', Function ($Join) { $Join->on('locality.id','=','locality_locality_id') ->Where('locality_project.project_id','=', $id); })->distinct()->get(); (...)

1 answer

0

When using an external variable inside a callback function in PHP you need to use it, for example: $id = 123; methodName(Function() use ($id) { echo $id; });

Follows the code snippet of the edit method of the Projectocontroller.php class

 $localidadesProjeto = Localidade::join('localidades_projeto', function ($join) use ($id) {
                            $join->on('localidade.id','=','localidades_projeto.localidade_id')
                            ->where('localidades_projeto.projeto_id','=',  $id ); })->distinct()->get();  

Browser other questions tagged

You are not signed in. Login or sign up in order to post.