Я создал новую базу данных Departements, которая содержит две строки (id, name). Я хочу импортировать информацию из базы данных и сделать ее в выпадающем списке в регистрационной форме

Как вы можете видеть из кода ниже, я добавил тег выбора в {{X0 } }

<div class="form-group-row">
    <label for="departements" class="col-md-4 control-label text-md-right">Départements :</label>
    <div class="col-md-6">
        <select name="departements" id="departements" class="form-control">
            @foreach($departements as $departement)
                <option value="{{ $departement ->id }}">{{ $departement ->name }}</option>
            @endforeach
       </select>
    </div>
</div>

Я уже установил отношения между пользователями и департаментами. Департамент модель:

class Departement extends Model
{
    public $fillable = ['name'];
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

Пользователь модель:

public function departements()
{
    return $this->belongsToMany('App\Departement');
}
public function HasAnydepartement($departements)
{
    if($this—>departements()->whereIn('name',$departements)->first())
    {
        return true;
    }
    return false;
}
public function Hasdepartement($departement)
{
    if($this->departements()->where('name',$departement)->first())
    {
        return true;
    }
    return false;
}

Я использовал App\Departement на контроллере регистра.

Моя проблема в том, что даже я использовал App\Departement, они показывают мне эту ошибку:

Неопределенная переменная: departements (представление: C: \ Users \ tchic \ AppData \ Roaming \ Composer \ vendor \ bin \ anapec \ resources \ views \ auth \ register.blade.php)

Это мой регистр контроллера, где у меня есть ошибка:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use App\Departement;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        $departements=Departement::all();
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'prenom' => ['required', 'string', 'max:255'],
            'phone' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     * @return \App\Departement
     */
    protected function create(array $data)
    {
        $departements=Departement::all();
        return User::create([
            'name' => $data['name'],
            'prenom' => $data['prenom'],
            'phone' => $data['phone'],
            'departement' => $data['departement'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

Если кто-то может помочь мне понять, где я могу определить переменную departements на контроллере Register, это было бы полезно. Спасибо.

0
Fupov 21 Июл 2020 в 16:41

2 ответа

Лучший ответ

Вам нужно сделать две вещи.

Я предполагаю, что вы используете стандартные леса аутентификации. Если вы посмотрите на черту RegistersUsers вашего RegistrationController, то увидите, что laravel использует метод showRegistrationForm для отображения формы регистрации. В вашем RegistrationController классе вам нужно переопределить этот метод, чтобы отобразить вашу пользовательскую форму регистрации. Вы можете сделать это так:

   /**
     * Show the application registration form.
     *
     * @return \Illuminate\View\View
     */
    public function showRegistrationForm()
    {
        $departements = Departement::all();
        return view('auth.register', [ 'departements' => $departments ]);
    }

Во-вторых, вам нужно настроить файл блейда, расположенный в ./resources/views/auth/register.blade.php. Поскольку вы предоставили только фрагмент для раскрывающегося списка, я включу его в файл блейда по умолчанию auth.register здесь.

<form method="POST" action="/auth/register">
    {!! csrf_field() !!}

    <div>
        Name
        <input type="text" name="name" value="{{ old('name') }}">
    </div>

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

    <div>
        Password
        <input type="password" name="password">
    </div>

    <div>
        Confirm Password
        <input type="password" name="password_confirmation">
    </div>
    
    <div class="form-group-row">
        <label for="departements" class="col-md-4 control-label text-md-right">Départements :</label>
        <div class="col-md-6">
            <select name="departements" id="departements" class="form-control">
                @foreach($departements as $departement)
                    <option value="{{ $departement ->id }}">{{ $departement ->name }}</option>
                @endforeach
            </select>
        </div>
    </div>

    <div>
        <button type="submit">Register</button>
    </div>
</form>
0
Kurt Friars 21 Июл 2020 в 21:28

Вы определили $ departements из цикла в представлении или передали его из контроллера? Если нет, при условии, что у вас есть пользователь , переданный в представлении, попробуйте это.

@foreach($user->departements() as $departement)
0
user3160468 21 Июл 2020 в 13:58