РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
424 of 1392 menu

Функция action

Функция action используется для получения URL-адреса, указывающего на конкретный метод контроллера. Первым параметром передаётся имя контроллера и метода в формате строки или массив вида [Controller::class, 'method']. Вторым необязательным параметром передаются параметры маршрута в виде массива. Функция возвращает строку с полным URL-путем к экшену контроллера, что особенно удобно при формировании ссылок в шаблонах и редиректов.

Синтаксис

Функция action доступна как в PHP-коде, так и в Blade-шаблонах:

<?php action($controllerMethod, $parameters = []); ?>

Пример

Создадим простой контроллер для работы с пользователями и сгенерируем URL-адрес для его экшена:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function index() { $users = ['user1', 'user2', 'user3']; return view('users', ['users' => $users]); } public function show($id) { return view('user', ['id' => $id]); } } ?>

В маршрутах зарегистрируем контроллер:

<?php use App\Http\Controllers\UserController; use Illuminate\Support\Facades\Route; Route::get('/users', [UserController::class, 'index'])->name('users.index'); Route::get('/users/{id}', [UserController::class, 'show'])->name('users.show'); ?>

Теперь сгенерируем URL для экшена контроллера:

<?php $url = action([UserController::class, 'index']); echo $url; ?>

Результат выполнения кода:

"http://localhost/users"

Пример

Сгенерируем URL для экшена контроллера с параметрами. Передадим идентификатор пользователя:

<?php $url = action([UserController::class, 'show'], ['id' => 5]); echo $url; ?>

Результат выполнения кода:

"http://localhost/users/5"

Пример

Использование функции action со строковым форматом. В качестве параметра можно передать строку вида "Controller@method":

<?php $url = action('App\Http\Controllers\UserController@show', ['id' => 10]); echo $url; ?>

Результат выполнения кода:

"http://localhost/users/10"

Пример

Генерация URL в Blade-шаблоне с помощью функции action:

<html> <body> <h1>Users List</h1> @foreach ($users as $user) <p> <a href="{{ action([App\Http\Controllers\UserController::class, 'show'], ['id' => $loop->index + 1]) }}"> View user {{ $user }} </a> </p> @endforeach </body> </html>

При рендеринге шаблона будут сгенерированы следующие ссылки:

<html> <body> <h1>Users List</h1> <p><a href="http://localhost/users/1">View user user1</a></p> <p><a href="http://localhost/users/2">View user user2</a></p> <p><a href="http://localhost/users/3">View user user3</a></p> </body> </html>

Пример

Использование функции action в контроллере для выполнения редиректа:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class UserController extends Controller { public function store(Request $request) { // логика сохранения пользователя $userId = 42; return Redirect::to(action([UserController::class, 'show'], ['id' => $userId])); } } ?>

Пример

Генерация URL для экшена контроллера с несколькими параметрами:

<?php use App\Http\Controllers\PostController; use Illuminate\Support\Facades\Route; Route::get('/posts/{category}/{slug}', [PostController::class, 'show'])->name('posts.show'); ?>

Теперь передадим параметры в функцию action:

<?php $url = action([PostController::class, 'show'], ['category' => 'news', 'slug' => 'laravel-article']); echo $url; ?>

Результат выполнения кода:

"http://localhost/posts/news/laravel-article"

Пример

Демонстрация работы функции action с относительными URL-адресами. Если не указан полный базовый URL, функция вернёт относительный путь:

<?php $relativeUrl = action([UserController::class, 'show'], ['id' => 7]); echo $relativeUrl; ?>

Результат выполнения кода (без учёта протокола и хоста):

"/users/7"

Смотрите также

  • функция route,
    которая генерирует URL-адрес по имени маршрута
  • функция url,
    которая генерирует абсолютный URL-адрес
  • функция to_route,
    которая выполняет редирект на маршрут по его имени
  • метод name,
    который присваивает маршруту уникальное имя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить