laravel: отображение данных из выпадающего списка - PullRequest
2 голосов
/ 20 февраля 2020

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

Кто-нибудь знает, как я могу потенциально отображать данные после нажатия кнопки отправки?

Search.Blade . php

{!! Form::open(['action' => 'SearchController@index', 'method' => 'POST']) !!}

 <div class="form-group">

 <select name="title" id="title" class="form-control input-lg dynamic" data-dependent="state">

 @foreach($posts as $post)
    <option value="{{$post->id}}">{{$post->title}} </option>
 @endforeach

 </select>
 <br>
  <div class="form-group">
 {{Form::Submit('submit', ['class' => 'btn btn-primary'])}}
 </div>


    <div class="table">
    <table>
    <tr>
     <th>Hotel Name</th>
     <td>{{$post->title}}</td>
     <th>Distance</th>
     <td>{{$post->distance}}</td>
     <th>Images</th>
     <td>{{$post->image}}</td>
    </tr>
  <tr>
  </tr>
 </td>
    </div> 

SearchController. php

  public function index()
    {
     $posts = Post::get();
     return view('Pages.search', compact('posts'));
     }
   public function store(Request $request)
  {



  }

Так что, когда я нажимаю "Отправить", он выводит меня на белую пустую страницу. Я не уверен, как извлечь данные из выбранного выпадающего списка и отобразить их на моей странице, если кто-нибудь знает, как это сделать, пожалуйста, сообщите.

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

После отправки формы вы попадете на страницу store(), поскольку запускаете запрос POST. Ваш метод магазина пуст, поэтому вы получите пустой экран. Сделайте так, чтобы ваш метод хранилища начинался с этого:

public function store(Request $request)
{
    // This will return all request data to your screen.
    return $request->all();
}

Если вы хотите использовать метод индекса, вам нужно изменить метод формы на GET. Тогда вам нужно только получить подробности сообщения из шаблона, так как вы уже отправляете все сообщения методом индекса:

{!! Form::open(['action' => 'SearchController@index', 'method' => 'GET']) !!}
<div class="form-group">
    <select name="title" id="title" class="form-control input-lg dynamic" data-dependent="state">
        <option value="">Choose an item</option>
        @foreach($posts as $post)
            <option value="{{ $post->id }}">{{ $post->title }}</option>
        @endforeach
    </select>
</div>
<div class="form-group">
    {{ Form::Submit('submit', ['class' => 'btn btn-primary']) }}
</div>
{!! Form::close() !!}

@if(request('title') and $item = $posts->where('id', request('title')))
    <div class="table">
        <table>
            <tr>
                <th>Hotel name</th>
                <td>{{ $post->title }}</td>
                <th>Distance</th>
                <td>{{ $post->distance }}</td>
                <th>Images</th>
                <td>{{ $post->image }}</td>
            </tr>
        </table>
    </div>
@endif
0 голосов
/ 20 февраля 2020

Если вы используете ресурсную маршрутизацию Laravel , тогда маршрут index() обрабатывает GET запросов, а маршрут store() обрабатывает POST запросов к той же конечной точке.

Хотя у вас есть действие формы как SearchController@index, оно разрешается только в URL, который совпадает с URL SearchController@store, и то, что Laravel обрабатывает их, отличается от метода запроса, как и я упомянутые выше.

Поэтому вы, вероятно, ищете что-то по следующим направлениям:

public function store(Request $request) { 
    $post = Post:: findOrFail($request->title); 
    return view('Pages.[page-name-here'], compact('post')); 
}

Если у вас возникли проблемы с пониманием того, какой маршрут реагирует на комбинацию конечной точки и метода go в командной строке и используйте php artisan route:list, чтобы увидеть сопоставления конечных точек для ваших маршрутов.


$ request-> title

Как используется Выше соответствует <select name='title'> в вашем шаблоне лезвия. Вы можете изменить их на post, потому что когда вы вернетесь к нему в будущем, вы сможете понять, что происходит.


findOrFail ()

Как указано выше, выдает ошибку 404 not found и останавливает выполнение, если соответствующая модель не извлекается из базы данных с заданным заголовком. С тем же успехом вы можете использовать find(), проверить модель Post и перенаправить обратно на предыдущую страницу, сгенерировать сбой проверки или любой другой желаемый ответ, если сообщение не получено.

0 голосов
/ 20 февраля 2020

Измените это на контроллере:

Post::get(); to Post::all()

Попробуйте это. Надеюсь, работа для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...