Я пытаюсь передать параметр моему 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 = "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
Это не то, как вы работаете с такой структурой. Что ты пытаешься сделать? Что содержит $my_var и откуда берется это содержимое?