2013-09-24 2 views
1

Учитывая ниже маршрутов будет реагировать наПеременные в маршрут группы префиксов Laravel 4

http://example.com/game/stats/123
http://example.com/game/stats/game/123
http://example.com/game/stats/reviewer/123

То, что я хочу знать, как я могу это сделать отвечать на

http://example.com/game/123/stats
http://example.com/game/123/stats/game
http://example.com/game/123/stats/reviewer

Я пытался делать

Route::group(['prefix' => 'game/{game}'], function($game){ 

Но это терпит неудачу с "Отсутствует аргумент 1 для {закрытия}()"

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

Route::group(['prefix' => 'game'], function(){ 
    Route::group(['prefix' => 'stats'], function(){ 
     Route::get('/{game}', ['as' => 'game.stats', function ($game) { 
      return View::make('competitions.game.allstats'); 
     }]); 
     Route::get('game/{game}', ['as' => 'game.stats.game', function ($game) { 
      return View::make('competitions.game.gamestats'); 
     }]); 
     Route::get('reviewer/{game}', ['as' => 'game.stats.reviewer', function ($game) { 
      return View::make('competitions.game.reviewstats'); 
     }]); 
    }); 
}); 
+0

Я заметил, что некоторые параметры вашего маршрута имеют префикс '$', а некоторые нет. – JofryHS

+0

Упс, введите, но это не имеет значения, поскольку имена параметров имеют значение только в том случае, если вы используете привязку маршрута, чего я не вижу сейчас, так что это всего лишь порядок. – Hailwood

ответ

5

Можете ли вы попробовать этот код, посмотрите, хотите ли вы этого. Здесь второй маршрут группы - это только {gameId}, а затем у вас есть группа stats, которая обертывает все остальные маршруты.

Route::group(['prefix' => 'game'], function(){ 
     Route::group(['prefix' => '{gameId}'], function(){ 
     Route::group(['prefix' => 'stats'], function(){ 
      Route::get('/', ['as' => 'game.stats', function ($game) { 
       return View::make('competitions.game.allstats'); 
      }]); 
      Route::get('game', ['as' => 'game.stats.game', function ($game) { 
      return View::make('competitions.game.gamestats'); 
      }]); 
      Route::get('reviewer', ['as' => 'game.stats.reviewer', function ($game) { 
      return View::make('competitions.game.reviewstats'); 
      }]); 
     }); 
     }); 
    }); 

И тогда в ваших взглядах вы можете называть их по имени маршрута и пройти gameId на маршруте;

{{ link_to_route('game.stats','All Stats',123) }} // game/123/stats/ 
{{ link_to_route('game.stats.game','Game Stats',123) }} // game/123/stats/game 
{{ link_to_route('game.stats.reviewer','Review Stats',123) }} // game/123/stats/reviewer 

Надеюсь, что это поможет вам решить вашу проблему.

EDIT

Я только что проверил Он должен работать также с Route::group(['prefix' => 'game/{game}' как вы пытались, но только убедитесь, что передать game аргумент при создании маршрута, как указано выше. Если у вас больше переменных, вы можете передать массив функции.

{{ link_to_route('game.stats','All Stats',['game' => '123','someOtherVar' => '456']) }} 
+0

AH! Это моя проблема, я ожидал, что с тех пор, как вы поместите переменные в определение маршрута, вам нужно добавить переменную к сигнатуре закрытия маршрута, что вам нужно будет сделать то же самое при закрытии группы маршрутов. – Hailwood

Смежные вопросы