Пользовательский маршрут Laravel 5 из контроллера поиска

Я новичок в Laravel и смотрел бесплатные видео на Laracast, чтобы попытаться продвинуться как можно дальше. У меня есть простой поисковый ввод, который принимает почтовый индекс (например: 92804). Он ищет в базе данных и находит почтовый индекс, ищет «провайдера» в строке, а затем возвращает представление в зависимости от найденного провайдера (на данный момент существует 4 провайдера). Например: 92804->anaheim->ca->provider1, чтобы он возвращал представление provider1 с необходимыми данными (город и штат). Я заставил его работать до этого момента, но когда представление возвращается, оно имеет URL-адрес

www.domain.com/search?q=92804.

Как я могу сделать маршрут или маршруты, чтобы он показывался.

www.domain.com/{city}-{state}-{provider1}

Это будут переменные, поэтому в примере это будет

www.domain.com/anaheim-ca-provider1

Я искал здесь и нашел это: (но я считаю, что это для более старой версии Laravel) Маршрутизация и контроллер Laravel для поиска

Мои маршруты:

Route::get('/', 'PagesController@index');
Route::get('search',['uses' => 'SearchController@getSearch','as' => 'search']);
Route::get('/{city}-{state}-{zipcode}',['uses' => 'PagesController@provider1','as' => 'search.provider1']);
Route::get('/{city}-{state}-{zipcode}',['uses' => 'PagesController@provider2','as' => 'search.provider2']);
Route::get('/{city}-{state}-{zipcode}',['uses' => 'PagesController@provider3','as' => 'search.provider3']);
Route::get('/{city}-{state}-{zipcode}',['uses' => 'PagesController@provider4','as' => 'search.provider4'])

;

Моя форма в приветственном представлении:

<form  action="search" method="get">
    <input type="text"  name="q" placeholder="Search.."/>
    <button type="submit">Search</button>
</form>

Контроллер страниц:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{
   public function index()
    {

        return view('welcome');

    }
public function provider1()
        {

            return view('providers/provider1/provider1Search');

        }
public function provider2()
            {

                return view('providers/provider2/provider2Search');

            }
public function provider3()
            {

                return view('providers/provider3/provider4Search');

            }
public function provider4()
            {

                return view('providers/provider4/provider4Search');

            }

}

Контроллер поиска:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;

class SearchController extends Controller
{
     public function getSearch(Request $request) 
        {
            $keyword =  $request->input('q');

            $data = DB::select("SELECT * FROM `TABLE 13` WHERE `Zip Code` = '$keyword'");

        $city = strtolower($data[0]->City);
        $state = strtolower($data[0]->State);
        $provider = strtolower($data[0]->{'Provider Name'});
        $zipcode = $data[0]->{'Zip Code'};

            if ($data[0]->{'Provider Name'})
                {
                    switch ($data[0]->{'Provider Name'})
                        {
                            case "provider1":
                                return redirect()->route('search.provider1',[$city,$state,$zipcode])->with('data',$data);
                                break;
                            case "provider2":
                                return return redirect()->route('search.provider2',[$city,$state,$zipcode])->with('data',$data);
                                break;
                            case "provider3":
                                return return redirect()->route('search.provider3',[$city,$state,$zipcode])->with('data',$data);
                                break;
                            case "provider4":
                                return return redirect()->route('search.provider4',[$city,$state,$zipcode])->with('data',$data);
                                break;
                        }
                }   
        }
}

Мои взгляды:

  1. provider1Поиск
  2. provider2Поиск
  3. провайдер3Поиск
  4. provider4Поиск
  5. добро пожаловать

В представлениях для providerSearch я называю город, штат, провайдер следующим образом:

{{$data[0]->City}},{{$data[0]->State}},{{$data[0]->{'Provider Name'}}

Это переменные, которые я хотел бы использовать в пользовательском маршруте.

Пример:

  1. почтовый индекс = 85257 = www.domain.com/scottsdale-az-provider1
  2. почтовый индекс = 92804 = www.domain.com/anaheim-ca-provider2
  3. почтовый индекс = 60605 = www.domain.com/chicago-il-provider3
  4. почтовый индекс = 01527 = www.domain.com/millbury-ma-provider4

person bootstrap714    schedule 02.01.2016    source источник
comment
Может быть, я вас неправильно понял, но вы не можете просто отправить поисковый запрос на q=xxxxx и позволить контроллеру вернуть redirect()->route() после получения данных?   -  person Joel Hinz    schedule 02.01.2016
comment
Спасибо, Джоэл. Я был сбит с толку тем, что такое 'redirect()-›route()', но я немного почитал и смог получить нужную структуру URL-адреса, но теперь представление выдает мне ошибку, говорящую о неопределенных переменных. Как я могу перенаправить обратно на маршрут и по-прежнему использовать переменные для города и штата в представлении?   -  person bootstrap714    schedule 02.01.2016
comment
Предполагая, что у вас есть переменные для города, штата и провайдера, а ваш маршрут настроен правильно, вы сможете предоставить их в вызове маршрута, например, например. route('my-route-name', [$city, $state, $provider]).   -  person Joel Hinz    schedule 02.01.2016
comment
Спасибо за вашу помощь. Маршрут теперь работает с форматом, который вы сказали ранее. Таким образом, URL-адрес изменяется и использует эти переменные. Но если я вызову {{$city}} в HTML возвращаемого представления. Говорит не определено. Итак, теперь URL-адрес правильный, но теперь я не могу использовать переменную в представлении (html).   -  person bootstrap714    schedule 02.01.2016
comment
Вы предоставили переменную представлению из вашего метода контроллера?   -  person Joel Hinz    schedule 02.01.2016
comment
Я не уверен, если честно. Нужно ли добавлять переменную в каждый метод провайдера в PagesController? Я обновил свой код, чтобы показать, с чем я сейчас работаю. Еще раз спасибо за помощь и время.   -  person bootstrap714    schedule 02.01.2016
comment
Да боится так. Пожалуйста, перейдите по этой ссылке для получения информации о передаче переменных: laravel.com/docs/ 5.1/views#передача данных в представления   -  person Joel Hinz    schedule 02.01.2016
comment
Спасибо Джоэл за вашу помощь. Мне придется сделать это таким образом. Есть ли способ отметить ваш комментарий как правильный? Я хотел бы отдать вам должное за ваше время и помощь.   -  person bootstrap714    schedule 02.01.2016
comment
Боюсь, нет, но это нормально. Я рад помочь. :)   -  person Joel Hinz    schedule 03.01.2016