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

Adicionando campos de cadastro ao registro

Olá pessoal,

Queria adicionar campos de cadastro na tabela user, para poder cadastrar mais dados ao usuário e já utilizar o autenticador padrão do laravel.

Tenho o codigo User.php

<?php namespace senge;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['name', 'email', 'password', 'cpf']; <--- aqui adiciono os campos novos? cpf, endereco, cep, telefone etc?

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

}

register.blade.php

@extends('app')

@section('content')
<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Register</div>
                <div class="panel-body">
                    @if (count($errors) > 0)
                        <div class="alert alert-danger">
                            <strong>Whoops!</strong> There were some problems with your input.<br><br>
                            <ul>
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif

                    <form class="form-horizontal" role="form" method="POST" action="{{ asset('/auth/register') }}">
                        <input type="hidden" name="_token" value="{{ csrf_token() }}">

                        <div class="form-group">
                            <label class="col-md-4 control-label">Name</label>
                            <div class="col-md-6">
                                <input type="text" class="form-control" name="name" value="{{ old('name') }}">
                            </div>
                        </div>

                        <div class="form-group">
                            <label class="col-md-4 control-label">E-Mail Address</label>
                            <div class="col-md-6">
                                <input type="email" class="form-control" name="email" value="{{ old('email') }}">
                            </div>
                        </div>

                        <div class="form-group">
                            <label class="col-md-4 control-label">Password</label>
                            <div class="col-md-6">
                                <input type="password" class="form-control" name="password">
                            </div>
                        </div>

                        <div class="form-group">
                            <label class="col-md-4 control-label">Confirm Password</label>
                            <div class="col-md-6">
                                <input type="password" class="form-control" name="password_confirmation">
                            </div>
                        </div>

<!-- NOVO CAMPO CPF -->
                        <div class="form-group">
                                <label class="col-md-4 control-label">CPF</label>
                                <div class="col-md-6">
                                <input type="text" name="cpf" class="form-control" value="{{ old('cpf') }}" placeholder="">
                            </div>
                            </div>

Esta faltando algum outro arquivo para mexer e poder funcionar? Já adicionei o campo cpf no MySQL.

7 respostas

Oi Leandro, tudo bom?

O ideal é você utilizar alguma ferramenta que faça esse mapeammento pra você (ORM). Esse tipo de integração pode ser bem chata mesmo.

Segundo a documentação do eloquent em relação ao fillable parece estar tudo OK. Só toma cuidado pois esse tipo de abordagem quebra a ideia de encapsulamento =)

Porém, posso ter deixado passar alguma coisa. Brota algum erro pra você no terminal ou na tela? As vezes com o erro fica mais facil achar o problema

No curso a gente fala do eloquent, mas para o laravel você também encontra o doctrine. Que também tem uma documentação bem legal =)

Abraço

Então, sou bem iniciante. Ele dá erro, simplesmente não cadastra o campo cpf que adicionei. Qual seria o melhor método para efetuar um cadastro completo com login e senha? Cria o cadastro novo e depois criar a autenticação?

Pensei em usar o register pois já esta funcional a questão do login.

Oi Leandro. Faz tempo que não mexo com autenticação do Laravel, então não lembro bem como é o restante do código. Porque nos controllers também são gerados alguns PHP que são executados no login, cadastro, etc. E lembro que era um pesadelo algumas coisas, como alterar as rotas padrão, porque o Laravel te dá uma estrutura pronta e eles não fazem de forma muito customizável.

Lembro que tive que entrar no vendor e ir caçando onde era para mudar. Talvez no seu caso, de adicionar um campo, não seja assim. Dê uma olhada nos controllers, pode até copiar e colar o código deles aqui também, porque lá pode estar faltando alguma mudança.

Depois que usei a autenticação pronta do Laravel nunca mais quis usar (a não ser no início, quando estava conhecendo mais o framework), passei a preferir autenticação "manual" mesmo, que não é muito mais complexa e você tem muito mais controle.

Entendi... Tem como você compartilhar com a gente o que está rolando na action '/auth/register' ? Essa rota é a padrão do laravel? Pois acredito que, caso essa rota seja gerada pelo framework ela provavelmente utilizara a classe App\User para representar seu usuario. E nessa classe não vamos ter o campo CPF e, por isso, não rola o preenchimento que a gente espera.

Como está rolando esse cadastro? Compartilha aqui com a gente =)

Abraço!

solução!

Olá, isso, estou usando o padrão.

app\User.php

<?php namespace senge;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = 
            array ('name', 'email', 'password', 'cpf');

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

}

Lembrando que eu instalei o Laravel 5.0 sugerido pelo instrutor do curso.

Oi Leandro, seu problema foi solucionado? Vi que foi marcado como solução. Aguardo retorno =)

Então, na verdade estou fazendo um cadastro novo e vou efetuar um login do zero, ficou muito complicado mexer no quem vem de default..kkkkk um abraço