英文:
How to get the required parameters in a controller?
问题
我不确定为什么找不到它,但我需要获取控制器中所需参数的值。例如,如果路由是/route/{param}
,如果有人输入/route/123
,我想要获取123
:
public function some_method(Request $request)
{
// 获取 {param} 的值,123
}
我所见到的只是它通常用于路由模型绑定,或者不使用Request
(https://laravel.com/docs/10.x/routing#route-model-binding):
use App\Http\Controllers\UserController;
use App\Models\User;
// 路由定义...
Route::get('/users/{user}', [UserController::class, 'show']);
// 控制器方法定义...
public function show(User $user)
{
return view('user.profile', ['user' => $user]);
}
*但也许我甚至不需要Request $request
,因为我可以通过request()
助手来获取它?
英文:
I'm not sure why I couldn't find it, but I need to get the value of the required parameter in the controller. For example if the route is /route/{param}
, and if someone entered /route/123
, I want to get 123
:
public function some_method(Request $request)
{
// get {param} value, 123
}
All I've seen is that it's either used for route-model-binding or that it doesn't use the Request
(https://laravel.com/docs/10.x/routing#route-model-binding):
use App\Http\Controllers\UserController;
use App\Models\User;
// Route definition...
Route::get('/users/{user}', [UserController::class, 'show']);
// Controller method definition...
public function show(User $user)
{
return view('user.profile', ['user' => $user]);
}
*But perhaps I don't even need Request $request
because I can get it via the request()
helper?
答案1
得分: 2
你可以同时使用 Request
参数、值参数或模型绑定,Laravel 足够智能以识别您期望的数据类型(因为给定了参数的类型)。因此,您可以这样做:
use App\Http\Controllers\YourController;
// 路由定义...
Route::get('/route/{param}', [YourController::class, 'some_method']);
// 控制器方法定义...
public function some_method(Request $request, string $param)
{
... // 对于 /route/123,$param 将具有 '123' 的值
}
如果您要获取的 ID 是某个模型的 ID,那么您可以同时使用 Request
和模型绑定:
use App\Http\Controllers\YourController;
use App\Models\YourModel;
// 路由定义...
Route::get('/route/{param}', [YourController::class, 'some_method']);
// 控制器方法定义...
public function some_method(Request $request, YourModel $param)
{
... // 对于 /route/123,您将获得 ID 为 123 的 YourModel
}
英文:
You can have both Request
parameter, value parameter or model binding, laravel is smart enough to recognize what's type of data you expect (due to giving type to the parameter). So you can do:
use App\Http\Controllers\YourController;
// Route definition...
Route::get('/route/{param}', [YourController::class, 'some_method']);
// Controller method definition...
public function some_method(Request $request, string $param)
{
... // for /route/123 $param will have '123' value
}
if the id that you want to get is id of some model, then you can have both Request
and model binding:
use App\Http\Controllers\YourController;
use App\Models\YourModel;
// Route definition...
Route::get('/route/{param}', [YourController::class, 'some_method']);
// Controller method definition...
public function some_method(Request $request, YourModel $param)
{
... // for /route/123 you will get YourModel with id 123
}
答案2
得分: 0
如果您想从路由中获取必需的参数,这里有一个很好的示例:
web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SomeController;
Route::get('/endpoint/{param}', [SomeController::class, 'someMethod']);
SomeController.php
<?php
namespace App\Http\Controllers;
class SomeController extends Controller
{
public function someMethod($param)
{
// 现在您可以使用 dd() 来检查该值
dd($param);
}
}
注意: 确保您的路由参数和函数参数具有相同的名称
您还可以使用段来访问参数值,这里是另一个示例:
public function someMethod($param)
{
request()->segment(2);
}
英文:
If you want to get required parameter from route so here is a good example:
web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SomeController;
Route::get('/endpoint/{param}', [SomeController::class, 'someMethod']);
SomeController.php
<?php
namespace App\Http\Controllers;
class SomeController extends Controller
{
public function someMethod($param)
{
// Now you can check the value
// by using dd()
dd($param);
}
}
Note: Make sure your route parameter and function parameter must be with same name
You can also access parameter value by using segment, here is another example:
public function someMethod($param)
{
request()->segment(2);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论