Метод singleton
Метод singleton класса Route определяет ресурсный маршрут, который работает с единственным экземпляром модели. В отличие от стандартного ресурсного маршрута, где модели идентифицируются по идентификатору, данный метод предполагает, что существует только один экземпляр модели, и для него не требуется параметр в URL. Метод принимает первым параметром имя пути (URI), а вторым - имя контроллера или замыкание. Третьим параметром можно передать массив опций для настройки маршрута.
Синтаксис
<?php
use Illuminate\Support\Facades\Route;
Route::singleton($uri, $controller);
Route::singleton($uri, $controller, $options);
?>
Пример
Давайте зарегистрируем маршрут для управления настройками приложения, используя единственный экземпляр модели Setting:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SettingController;
Route::singleton('settings', SettingController::class);
?>
Результат выполнения кода:
"GET /settings - index"
"GET /settings/edit - edit"
"PUT /settings - update"
Как видно из результата, метод создаёт три маршрута для работы с единственным экземпляром модели.
Пример
Давайте создадим контроллер для работы с профилем пользователя с использованием метода singleton:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProfileController;
Route::singleton('profile', ProfileController::class);
?>
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ProfileController extends Controller
{
public function index()
{
$user = Auth::user();
return view('profile.index', ['user' => $user]);
}
public function edit()
{
$user = Auth::user();
return view('profile.edit', ['user' => $user]);
}
public function update(Request $request)
{
$user = Auth::user();
$user->update($request->validated());
return redirect()->route('profile.index');
}
}
?>
Результат выполнения кода:
"GET /profile - index"
"GET /profile/edit - edit"
"PUT /profile - update"
Пример
Давайте настроим маршрут с дополнительными опциями, указав имя маршрута и ограничения для связанной модели:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DashboardController;
Route::singleton('dashboard', DashboardController::class, [
'names' => [
'index' => 'dashboard.home',
'edit' => 'dashboard.settings',
'update' => 'dashboard.save',
],
'only' => ['index', 'edit', 'update'],
]);
?>
Результат выполнения кода:
"GET /dashboard - dashboard.home"
"GET /dashboard/edit - dashboard.settings"
"PUT /dashboard - dashboard.save"
В данном примере мы переопределили стандартные имена маршрутов и указали, что должны быть созданы только три действия.
Смотрите также
-
метод
resource,
который создаёт полный набор ресурсных маршрутов -
метод
apiResource,
который создаёт ресурсные маршруты для API -
метод
group,
который группирует маршруты с общими атрибутами -
метод
prefix,
который добавляет префикс к группе маршрутов