Laravel - передача параметров из маршрутов web.php в контроллер

Я пытаюсь передать параметр моему UserController, но не могу найти способ сделать это. Во всех других темах приводятся примеры, когда параметр уже определен в URL-адресе, но это не то, что мне нужно.

$my_var = "some data";
Route::get('/login', 'Auth\UserController@login');

Мне нужно $my_var в моем UserController

class UserController extends Controller
{

    public function login()
    {
        // Retreive $my_var somehow
        return view("login");
    }
}

Извините за мой плохой английский, это не мой родной язык

Это не то, как вы работаете с такой структурой. Что ты пытаешься сделать? Что содержит $my_var и откуда берется это содержимое?

Niklas S. 15.02.2019 22:26
Стоит ли изучать 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
1
2 271
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

$my_var = "some data";
Route::get('/login', function(){
Return view('login', compact('my_var')):
});
Ответ принят как подходящий

Ты делаешь это неправильно. Это не то, как вы работаете с инфраструктурой MVC, и лучше не определять переменную или константу в web.php, которая предназначена только для ваших маршрутов и промежуточного программного обеспечения. Кстати, если вам нужно сделать это таким образом, у вас есть два пути:

1) Используйте черту:

веб.php:

trait TestTrait {
    public static $my_var = 'some data';
}

Route::get(/login', 'Auth\UserController@login');

UserConroller.php:

use TestTrait;

class UserController extends Controller
{
use TestTrait;

public function login()
{
    // You can retrieve it as a variable: $my_var
    echo TestTrait::$my_var;
}
}

2) Используйте константу вместо переменной:

веб.php:

define('MY_VAR', 'some data');
Route::get('/login', 'Auth\UserController@login');

UserConroller.php:

public function login()
{
    // You can retrieve it as a constant: MY_VAR
    echo MY_VAR;
}

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

Например, у вас может быть спокойный «users/» -маршрут, который извлекает всех пользователей из UserModel. Затем вы хотите разделить «обычных» пользователей и пользователей-администраторов с помощью «admin-users/» -route. Теперь один из способов — представить оба маршрута к web.php и сделать так, чтобы они указывали на один и тот же контроллер:

Route::resource('users', 'UserController');
Route::resource('admin-users', 'UserController');

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

$sqlFilters['user_is_admin'] = $request->is('admin-users') || $request->is('admin-users/*');

Это проверяет, был ли доступ к контроллеру через «пользователей-администраторов». Звездочка является подстановочным знаком для любого маршрута в пути «admin-users».

Этот метод существует по крайней мере с Laravel 6.0, возможно, даже раньше: https://laravel.com/docs/8.x/requests#inspecting-the-request-path

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