Как настроить Laravel для выбора города через URL?

Как изменить текущий город в URL с учетом наличия нескольких сегментов после него, если город выбирается через ID города и ID региона с помощью селекта без обновления страницы?
  • 24 июля 2024 г. 14:23
Ответы на вопрос 2
Для настройки Laravel для выбора города через URL можно воспользоваться маршрутизацией и контроллерами. 

Во-первых, определите маршрут для выбора города в файле routes/web.php:

```php
Route::get('/city/{city}', 'CityController@show');
```

Здесь `{city}` - это переменная, которая будет содержать название или ID выбранного города.

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

```php
class CityController extends Controller
{
    public function show($city)
    {
        // Здесь можно выполнить какие-то действия с выбранным городом
        return view('city.show', compact('city'));
    }
}
```

Теперь, при переходе по URL типа `http://example.com/city/Paris`, Laravel будет вызывать метод show контроллера CityController и передавать ему название города "Paris".

Чтобы изменить текущий город в URL с учетом нескольких сегментов после него, можно воспользоваться JavaScript и AJAX запросами. Например, при смене значения в селекте с городами можно отправлять AJAX запрос на сервер для обновления URL без перезагрузки страницы:

```javascript
$('#citySelect').change(function() {
    var selectedCity = $(this).val();
    
    $.ajax({
        url: '/updateCity',
        type: 'GET',
        data: { city: selectedCity },
        success: function(data) {
            window.history.pushState('', '', '/city/' + selectedCity);
        }
    });
});
```

Здесь `#citySelect` - это ID селекта с городами, который отправляет AJAX запрос при изменении значения. В контроллере можно добавить метод updateCity для обновления текущего города:

```php
public function updateCity(Request $request)
{
    $city = $request->input('city');
    
    // Здесь можно выполнить какие-то действия с выбранным городом
    
    return response()->json(['status' => 'success']);
}
```

Теперь при смене значения в селекте города, URL будет автоматически обновляться без перезагрузки страницы и сохранять текущий город в URL.
Замените '{city?}' на '{city}' и будет вам счастье. На случай, когда город неизвестен, используйте в маршрутах любое удобное для вас значение по умолчанию: anycity, defaultcity, somecity, GothamCity, foofoobar, asdf... - что угодно.
Похожие вопросы