почему у меня возникает эта проблема, когда я хочу отфильтровать проект

#laravel

#laravel

Вопрос:

Я хочу добавить функцию перевода на свой веб-сайт. но у меня возникла эта проблема

Отсутствуют обязательные параметры для [Route: filterdata] [URI: {locale} / project / {filter}]

это веб-маршрут приложения:

 Route::get('/', function () {
    return redirect(app()->getLocale());
});
Route::get('/project', function () {
    return redirect(app()->getLocale());
});
Route::group([
    'prefix' => '{locale}', 
    'where' => ['locale' => '[a-zA-Z]{2}'],
    'middleware' => 'setlocale',
], function(){
    Route::get('/', function(){
        return view('pages.home');
    })->name('home');
    Route::get('/project/{filter}', 'ProjectController@filterProject')->name('filterdata');
});
  

это блейд-проект

 <a class="btn btn-default" href="{{ url(app()->getLocale().'/project/Branding') }}" role="button">Branding</a>
  

это контроллер:

 public function filterProject($locale, $filter){
        $locale = $locale;
        $filter = str_replace('-',' ',$filter);
        $url = Lang::get('proyek.project');
        $url2 = json_encode($url);
        $data = json_decode($url2, true);
        $data = array_filter($data);
        
        if(collect($data)->where('tag1',"{$filter}")->all() == true){
            $project = collect($data)->where('tag1',"{$filter}")->all();
        }elseif(collect($data)->where('tag2',"{$filter}")->all() == true){
            $project = collect($data)->where('tag2',"{$filter}")->all();
        }elseif(collect($data)->where('tag3',"{$filter}")->all() == true){
            $project = collect($data)->where('tag3',"{$filter}")->all();
        }else{
            $project = collect($data)->all();
        }
        return view ('pages/projects', compact('project','locale','filter'));
}
  

и это кнопки, которые я использую для переключения языка:

 <div class="form-check d-flex align-items-center">
          <input type="radio" class="form-check-input form-control" name="language" id="languageen" value="{{ route(IlluminateSupportFacadesRoute::currentRouteName(), 'en') }}" onchange="location = this.value;" @if(app()->getLocale() == 'en') checked @endif>
          <label class="form-check-label control-label" for="languageen">
            EN
          </label>
        </div>
        <div class="form-check d-flex align-items-center">
          <input type="radio" class="form-check-input form-control" name="language" id="languageid" value="{{ route(IlluminateSupportFacadesRoute::currentRouteName(), 'id') }}" onchange="location = this.value;" @if(app()->getLocale() == 'id') checked @endif>
          <label class="form-check-label control-label" for="languageid">
            ID
          </label>
        </div>
  

Ответ №1:

Похоже, вы никогда не передавали $filter переменную в свой маршрут в элементе button:

 <a class="btn btn-default" href="{{ url(app()->getLocale().'/project/Branding') }}" role="button">Branding</a>
  

Как вы можете видеть, вы передаете только $locale параметр. Для того, чтобы это сработало, вы также передаете свою $filter переменную

 <a class="btn btn-default" href="{{ url(app()->getLocale().'/project/Branding/' . $filter) }}" role="button">Branding</a>
  

Если вам не нужно $filter каждый раз при вызове этого маршрута, вы можете сделать его необязательным с помощью ? оператора:

 Route::get('/project/{filter?}', 'ProjectController@filterProject')->name('filterdata');
  

Ответ №2:

златан

«Брендинг» — это фильтр

 <a class="btn btn-default" href="{{ url(app()->getLocale().'/project/Branding') }}" role="button">Branding</a>