2016-02-24 2 views
0

Я использую Laravel и пытаюсь добавить новое поле выбора в стандартную регистрационную форму Bootstrap. Я не могу получить значение, указанное в поле выбора, для отображения в моей базе данных после отправки формы. Все остальные поля (например, имя пользователя и адрес электронной почты) работают нормально.Добавление поля выбора в форму бутстрапа и его отправку в базу данных в проекте Laravel

Ниже приведена часть кода с удаленными полями для краткости. Все, что я сделал, это добавить поле выбора без изменения кода в других файлах Laravel. БД имеет две таблицы. Один из них называется институтами, который имеет две колонки: «имя» и «instid» (первичный ключ). Другой называется пользователем, который имеет несколько столбцов, один из которых является «instid» (внешний ключ). Это поле внешнего ключа является тем, на которое я хотел бы опубликовать выбранное значение.

Как получить значение, указанное в поле выбора, которое появится в моей базе данных после отправки формы?

@extends('layouts.app') 
 

 
@section('content') 
 
<div class="container"> 
 
    <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"> 
 
        <form class="form-horizontal" role="form" method="POST" action="{{ url('/register') }}"> 
 
         {!! csrf_field() !!} 
 

 
         <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"> 
 
          <!-- use for="name" so that clicking on label places cursor in input field with id="name" --> 
 
          <label class="col-md-4 control-label" for="name">Name</label> 
 

 
          <div class="col-md-6"> 
 
           <input type="text" class="form-control" id="name" name="name" value="{{ old('name') }}"> 
 

 
           @if ($errors->has('name')) 
 
            <span class="help-block"> 
 
             <strong>{{ $errors->first('name') }}</strong> 
 
            </span> 
 
           @endif 
 
          </div> 
 
         </div> 
 

 
         <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> 
 

 
         <div class="form-group"> 
 
          <label class="col-md-4 control-label" for="instid">Institution</label> 
 

 
          <div class="col-md-6"> 
 
           <select class="form-control" id="instid" name="instid" required="required"> 
 
            <option value="" selected disabled>Choose an institution.</option> 
 
            <?php 
 
             $institutions = App\Institution::all(); 
 
             foreach($institutions as $institution){ 
 
              echo "<option value=\"" . $institution->instid . "\">" . $institution->name . "</option>"; 
 
             } 
 
            ?> 
 
           </select> 
 
          </div> 
 
         </div> 
 
    
 
         <div class="form-group"> 
 
          <div class="col-md-6 col-md-offset-4"> 
 
           <button type="submit" class="btn btn-primary"> 
 
            <i class="fa fa-btn fa-user"></i>Register 
 
           </button> 
 
          </div> 
 
         </div> 
 
        </form> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div> 
 
@endsection

+0

'Я не могу получить значение, указанное в поле выбора, чтобы показать в моих database' могли бы вы быть так любезны, по крайней мере, указать, какую версию Laravel вы бегаете, показывают соответствующую часть вашего Контроллер (или маршрут, или где бы вы не справились с этим запросом) и показать, как вы отлаживали это в своем контроллере? –

+1

Конечно! Laravel 5. Часть проблемы заключается в том, что я не знал, что мне нужно изменить контроллер. До этого момента Laravel настраивал контроллер самостоятельно. Есть ли команда artisan, которая автоматически обновит контроллеры, когда я добавлю столбец в свою БД? С помощью приведенного ниже предложения Jilson T, я понял код. В ближайшее время я обновлю свою версию решения. – Atlas

+0

Насколько мне известно, я знаю только о функциях 'php artisan make:', касающихся этого (попробуйте 'php artisan help make'). Удачи! –

ответ

1
<select class="form-control" id="instid" name="instid" required="required"> 
    <option value="" selected disabled>Choose an institution.</option> 
    @foreach($institutions as $institute) 
     <option value="{{ institute->id }}">$institution->name</option> 
    @endforeach 
</select> 

Теперь в контроллере: ответ $request->input('instid');

public function store(Request $request) 
{ 
    $instituteId = $request->input('instid'); 
} 
+0

Спасибо! Это помогло мне в решении, которое немного отличается. Я здесь новенький. Каков наилучший способ опубликовать мою версию решения? Могу ли я редактировать свой оригинальный пост с ним или добавить его в качестве ответа? – Atlas

0

Jilson Т. помогла мне к следующему решению:

Я оставил код в моем первоначальном вопросе неизменным. (Предлагаемые изменения Jilson, чтобы выбор объекта являются более красноречивым использованием функций Laravel, но не меняют функциональность.)

В каталоге Laravel Http, содержание User.php

protected $fillable = [ 
     'name', 'email', 'password', 
]; 

должен быть:

protected $fillable = [ 
     'name', 'email', 'instid', 'password', 
    ]; 

В контроллерах AUTH, содержание AuthController.php

protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 

должно быть:

protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'instid' => 'required|integer', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'instid' => $data['instid'], 
      'password' => bcrypt($data['password']), 
     ]); 
    }