Маршрут Laravel застрял в UTF-8

у меня есть этот контроллер для перенаправления:

$zone='لندن';
$type='خانه';

return redirect()->route('searchResult',['zone' => $request->zone , 'type' => $request->type]);

и вот мой маршрут:

Route::get('/estates/{zone}/{type}', 'EstateController@searchResult')->name('searchResult');

Когда его перенаправляют, я получаю такой URL-адрес:

http://localhost:8000/estates/لندن/خانه

Вместо вышеуказанного я хотел бы иметь этот URL-

http://localhost:8000/estates/خانه/لندن

я не хочу переключать параметры маршрута! нужна помощь ти!

Отредактировано:
у меня есть этот маршрут:
/estates/{zone}
и хочу этот маршрут
/estates/{zone}/{type} быть подмаршрутом для базового маршрута
но он вернет меня обратным маршрутом, и он не будет дружелюбным! и поэтому я не хочу менять параметры маршрута!

Просто поменяйте местами {type} и {zone} в определении маршрута?

Jerodev 01.03.2019 15:09

не могу чувак! это изменить мой план на другой маршрут! я пишу не хочу переключать параметры маршрута!

Fardin Moradi 01.03.2019 15:13
['zone' => $request->zone , 'type' => $request->type] Кажется, он делает то, что должен. Почему бы просто не поменять местами тип и зону?
apokryfos 01.03.2019 15:14

потому что у меня есть другой маршрут локальный хост: 8000/поместья{zone}/, и я хочу, чтобы этот маршрут:/estates/{zone}/{type} был подмаршрутом для базового маршрута!

Fardin Moradi 01.03.2019 15:18

Можете ли вы еще раз просмотреть свой вопрос и попытаться обновить его таким образом, чтобы прояснить проблему?

apokryfos 01.03.2019 15:19

Да! я редактирую свой вопрос!

Fardin Moradi 01.03.2019 15:24

Можем ли мы увидеть оба ваших маршрута, какой из них стоит перед другим, имя первого маршрута без типа?

KeitelDOG 01.03.2019 16:58

Вы хотите, чтобы это были 2 маршрута или один и тот же маршрут с {type} в качестве необязательного параметра?

KeitelDOG 01.03.2019 17:01

@KeitelDOG нет, лажа, я просто хочу знать, почему мой маршрут меняется с этого localhost: 8000/усадьбы/لندن/خانه на этот localhost:8000/усадьбы/خانه/لندن, когда я иду таким образом $zone='لندن'; $type='خانه'; Route::get('/estates/{zone}/{type}

Fardin Moradi 01.03.2019 17:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
172
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не могу воспроизвести ваше точное поведение, но у Laravel есть кое-что, чтобы лучше обрабатывать такие подпараметры, которые являются необязательными параметрами. https://laravel.com/docs/5.7/routing#параметры-необязательные параметры

Определите один маршрут и поставьте ? после имени параметра, чтобы сделать его необязательным:

Route::get('/estates/{zone}/{type?}', 'EstateController@searchResult')->name('searchResult');

И в сигнатуре метода действия укажите параметр типа как необязательный.

<?php

public function searchResult($zone, $type=null)
{
    echo $zone.' / '.$type;

    /*if (!$type) {
        $type = 'commune';

        return redirect()->route('searchResult',['zone' => request()->zone , 'type' => $type]);
    }*/

}

И в вашем случае я действительно не вижу смысла передавать request()->type в качестве параметра маршруту, потому что даже если он нулевой или нет, вы останетесь в том же состоянии. Если в вашем коде есть новая переменная $type, передайте ее как:

return redirect()->route('searchResult',['zone' => request()->zone , 'type' => $type]);

РЕДАКТИРОВАТЬ -------

Если ваш код в контроллере действительно:

$zone='لندن';
$type='خانه';

return redirect()->route('searchResult',['zone' => $request->zone , 'type' => $request->type]);

Тогда я думаю, что вы должны использовать переменную $zone и $type вместо значения параметров запроса:

$zone='لندن';
$type='خانه';

return redirect()->route('searchResult',['zone' => $zone , 'type' => $type]);

Другие вопросы по теме