Laravel在url中创建了一个带有param的路由方法GET



我创建了一个路由&控制器:

Route::group(['prefix' => 'test'], function () {
Route::get('product/{id}', ['uses' => 'ProductController@getProduct']);
});

产品控制器:

class ProductController extends MyController {
public $_params = null;
public function __construct(Request $request) {
$this->request = $request;
$this->_params = $request->all();
$options = array();
parent::__construct($options);
}
public function getProduct() {
dd($this->_params);
}
}

我请求:http://localhost/test/product/123

但是id=123不存在于$this-&gt_params

请求参数是与POST数据类似的输入数据。要访问路由参数,您需要创建另一个类属性,如"$routeParams";

class ProductController extends MyController {
public $_params = null;
public $routeParams = null;
public function __construct(Request $request) {
$this->request = $request;
$this->_params = $request->all();
$this->routeParams = $request->route()->parameters();
$options = array();
parent::__construct($options);
}
public function getProduct() {
dd($this->routeParams);
}
}

我知道需要在Laravel之上实现您的逻辑,但我建议您在一些服务、操作、域中这样做。。。。也许这会有所帮助:https://laravel-news.com/controller-refactor

您可以尝试像文档中的基本控制器一样进行操作为复杂的东西做一些定制服务。

class ProductController extends Controller
{
public function getProduct($id)
{
$productService = new ProductService($id);
//....
}
}

如果您想获得路由参数的数组,您需要使用$request->route()->parameters(),而不是$request->all()

$request->all()返回GET请求的查询参数

$request->all((只能从标头、正文和URL中获取参数,但不能从路由产品/{id}中获取参数

您应该将func getProduct替换为param idpublic function getProduct($id) { dd($id); }

如果您希望请求中的所有参数都使用$request->all((方法,但您只希望url中的id$request->id

相关内容

最新更新