Diferença entre Request e Request->all()


Poderia jurar que fiz essa lógica do mesmo jeito e funcionou, entretanto, agora, dá um problema sério, quando pego a senha do form, eu faço $request->senha = bcrypt($request->senha); e lá no final, onde inseri um dump die, antes de fazer update ou create, as duas linhas de dd no $request e no $request->all(), ocorre uma direrença, entre a senha do $request->senha ser criptografada e a do $request->all() não ser e o problema é que a Model aceita, desses dois, o $request->all() que não está criptograda, não dando pra autenticar o usuário depois de criá-lo.

1 curtida

A pergunta é boa e também pode esclarecer muitas dúvidas quando se trabalha com o Framework Laravel.

Quando você altera um membro da instância do $request o mesmo fica com as alterações, mas, o método ->all() são os dados em bruto sem alteração que foram enviados do seu formulário ou/e query ou/e files não sofrem alterações feitas na instância $request, o atributo da classe é um instância de outra classe (new ParameterBag($request)) que faz outras operações e você utilizando a instância $request não altera essa porque não chega até ela.

Recomendação:

  • Utilize dessa forma:

    $data = $request->all();
    $data['senha'] =  .... ;
    

e passe o valor do $data para Eloquent

User::create($data)

essa é a forma ideal.

Valeu. Consegui processar isso, subconscientemente, ainda há pouco, mas se não tivesse, a sua resposta me seria a solução.

1 curtida