Laravel 4.2 ссылка на ссылки на действия и% 27

Привет, у меня есть следующая строка:

{{ link_to_action('FriendController@add', 'Friend ' .explode(" ", $user->name)[0],[Auth::user()->id,$user->id]) }} 

и маршрут, определенный как

 Route::post('friend/add{id}&{fid}', ['as' => 'friend.add', 'uses' => 'FriendController@add']); 

однако url не разбирает 2 аргумента правильно, поскольку он появляется как / add1% 262 вместо / add? 1 & 2

Я не могу понять, почему, он работал раньше. Также он приходит с методом [show], не существует, когда он проходит.

Solutions Collecting From Web of "Laravel 4.2 ссылка на ссылки на действия и% 27"

Здесь есть две проблемы, которые не соответствуют вашим ожиданиям относительно того, что должно произойти:

1. Первым и наиболее link_to_action является то, что вспомогательная функция link_to_action использует метод to в классе Illuminate\Routing\URLGenerator для генерации URL-адреса, который, в свою очередь, использует метод rawurlencode который будет кодировать зарезервированные символы в соответствии с RFC 3986 , Поскольку символ & является зарезервированным символом субграничника, он автоматически получает кодировку до %26 , что приведет к тому, что ваш URL-адрес будет выглядеть так /add1%262 .

2. Вторая проблема заключается в том, что вы определяете маршрут маршрута, как этот friend/add{id}&{fid} , но вы ожидаете, что он будет иметь ? там. Даже если вы должны добавить это определение маршрута, например, так: friend/add?{id}&{fid} , он все равно не будет работать, потому что ? является символом разделителя и также будет закодирован, так что вы получите /add%3F1%262 .

Центральная проблема здесь заключается в том, что вы не должны определять параметры строки запроса в своем определении маршрута Laravel. Таким образом, вы либо перемещаете параметры из определения маршрута в строку запроса, либо строят свою HTML-ссылку и URL-адрес вручную:

 // routes.php Route::post('friend/add', ['as' => 'friend.add', 'uses' => 'FriendController@add']); // Your Blade template <a href="{{ action('FriendController@add') }}?{{ Auth::user()->id }}&amp;{{ $user->id }}"> Friend {{ explode(" ", $user->name)[0] }} </a> 

Или измените определение маршрута, чтобы он не содержал никаких зарезервированных символов, которые могут быть закодированы:

 // routes.php Route::post('friend/add/{id}/{fid}', ['as' => 'friend.add', 'uses' => 'FriendController@add']); // Your Blade template {{ link_to_action('FriendController@add', 'Friend ' .explode(" ", $user->name)[0],[Auth::user()->id,$user->id]) }} 

При том, что даже с вашей текущей настройкой, которая генерирует путь /add1%262 , Laravel все равно будет знать, как декодировать параметры, поэтому в вашем методе действия контроллера вы все равно получите 1 и 2 в качестве идентификаторов пользователя:

 public function add($id, $fid) { // $id = 1 // $fid = 2 }