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

Passar Codigo por Hidden

Alguem pode me ajudar? Tenho um cadastro de responsavel onde ele faz o login e cadastra os dependentes.. só que quando o responsavel esta logado e vai fazer o cadastro dos dependentes dele precisso passar o cod_responsavel para o banco.. eu consigo recuperar o cod_responsável assim no meu AppController:

// Recupera o Código do Responsável Logado

            $codigo = $this->Auth->user('codigo');
            $this->set('codigo',  $codigo);

e passo ele assim pela minha view:

<?= $this->Form->input('cod_responsavel',['type'=>'hidden', 'id'=>'cod_responsavel','value'=> $codigo]) ?>

No Navegador ele exibe:

<input type="hidden" name="cod_responsavel" id="cod_responsavel" value="14">

Mas quando recebo ele pelo método ele esta vindo nulo:

{
    "cod_responsavel": null,
    "nome": "Nome",
    "rg": "987654",
    "dt_nascimento": "11\/11\/1111",
    "naturalidade": "Varginha",
    "estado": "MG",
    "escola": "Marista",
    "como_soube": "Facebook",
    "pq_escolheu": "sahusa"
}
10 respostas

Janai, eu tenho uma pequena pergunta: Você precisa mesmo enviar o código do responsável para o form? Não poderia pegar o código do responsável na sessão direto no controller?

Posso, mas como? Como que eu gravaria no banco ele junto com os dados que vem do formulário?

Desculpa, viajei aqui, mas como você está recendo os dados no controller?

Na verdade esses dependentes são candidatos a processo seletivo minha função esta assim:

 public function cadastrarCandidato() {

        $candidatosTable = TableRegistry::get('Candidatos');
        $candidato = $candidatosTable->newEntity($this->request->data());

        print_r('<pre>'.$candidato);
        /*    
        if($candidatosTable->save($candidato)){
                $msg = 'Candidato cadastrado com sucesso!';
                echo $this->Flash->set($msg,['element'=>'success']);
            }
            else{
                $msg = 'Erro Fatal 201!Entre em contato com o administrador do sistema para a sulução deste problema.';
                echo $this->Flash->set($msg,['element'=>'error']);
            }

        $this->redirect('/candidatos/index');
        */
    }

Dá um print_r nos dados da requisição primeiro antes de criar o registro pra ver: print_r($this->request->data())

solução!

Resolvi!

Não sei se esta é a melhor forma de se fazer.. se alguem puder comentar a respeito

public function cadastrarCandidato() {

        $dados = $this->request->data();
        $dados [cod_responsavel] = $this->Auth->user('codigo');

        $candidatosTable = TableRegistry::get('Candidatos');
        $candidato = $candidatosTable->newEntity($dados);


        if($candidatosTable->save($candidato)){
                $msg = 'Candidato cadastrado com sucesso!';
                echo $this->Flash->set($msg,['element'=>'success']);
            }
            else{
                $msg = 'Erro Fatal 201!Entre em contato com o administrador do sistema para a sulução deste problema.';
                echo $this->Flash->set($msg,['element'=>'error']);
            }

        $this->redirect('/candidatos/index');

    }

Era exatamente isso que eu estava te falando, voce capturou os dados do formulário, pegou o código do responsável pela sessão e fez funciona. Apesar dessa solução funcionar, foi curioso a primeira não. Depois irei analisar direitinho fazendo este curso/projeto também.

Fico feliz por ter conseguido, parabéns!

deu certo.. ele esta gravando... mas... agora que eu vi esta me dando uma porção de erro..

Notice (8): Use of undefined constant cod_responsavel - assumed 'cod_responsavel' [APP/Controller\CandidatosController.php, line 24]
Warning (512): Unable to emit headers. Headers sent in file=C:\xampp\htdocs\janai\vendor\cakephp\cakephp\src\Error\Debugger.php line=754 [CORE\src\Http\ResponseEmitter.php, line 48]
Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\janai\vendor\cakephp\cakephp\src\Error\Debugger.php:754) [CORE\src\Http\ResponseEmitter.php, line 145]
Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\janai\vendor\cakephp\cakephp\src\Error\Debugger.php:754) [CORE\src\Http\ResponseEmitter.php, line 170]
Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\janai\vendor\cakephp\cakephp\src\Error\Debugger.php:754) [CORE\src\Http\ResponseEmitter.php, line 170]
Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\janai\vendor\cakephp\cakephp\src\Error\Debugger.php:754) [CORE\src\Http\ResponseEmitter.php, line 170]

Meu Controller:

<?php

namespace App\Controller;
use Cake\ORM\TableRegistry;

class CandidatosController extends AppController{


    public function index(){

    }

    public function processo(){
        $processosTable = TableRegistry::get('Processos');
        $processo = $processosTable->find('all', array('conditions' => array('Processos.status =' => '1')));

       echo($processo);

    }

    public function cadastrarCandidato() {

        $dados = $this->request->data();
        $dados[cod_responsavel]= $this->Auth->user('codigo');
       // $dados [cod_processo] = $processo;

        $candidatosTable = TableRegistry::get('Candidatos');
        $candidato = $candidatosTable->newEntity($dados);

        //print_r($candidato);

        if($candidatosTable->save($candidato)){
                $msg = 'Candidato cadastrado com sucesso!';
                echo $this->Flash->set($msg,['element'=>'success']);
            }
            else{
                $msg = 'Erro Fatal 201!Entre em contato com o administrador do sistema para a sulução deste problema.';
                echo $this->Flash->set($msg,['element'=>'error']);
            }

        $this->redirect('/candidatos/index');

    }
    public function cadastrar(){

        $candidatosTable = TableRegistry::get('Candidatos');
        $candidato = $candidatosTable->newEntity();
        $this->set('candidato', $candidato);

    }
}

Você precisa por aspas aqui;

$dados['cod_responsavel']= $this->Auth->user('codigo');

Posições de array sempre com aspas, a não ser que sejam numéricos ou sejam variavéis

Show! Obrigado..