Php 如何从jeffochoa教程将请求重定向到laravel中的特定路由

Php 如何从jeffochoa教程将请求重定向到laravel中的特定路由,php,laravel,laravel-routing,Php,Laravel,Laravel Routing,我试图实现jeff ochoa编写的这个示例代码,它允许您将请求重定向到laravel中的特定路由 我在运行代码时遇到此错误: Got error 'PHP message: [31 /.../app/Providers/RouteServiceProvider.php 0 Argument 1 passed to Illuminate\\Routing\\Router::App\\Providers\\{closure}() must be an instance of Request, i

我试图实现jeff ochoa编写的这个示例代码,它允许您将请求重定向到laravel中的特定路由

我在运行代码时遇到此错误:

Got error 'PHP message: [31 /.../app/Providers/RouteServiceProvider.php 0 Argument 1 passed to Illuminate\\Routing\\Router::App\\Providers\\{closure}() must be an instance of Request, instance of Illuminate\\Http\\Request given]'
谁能告诉我哪里出了问题?$request对象在接收时已预定义为一个\Http\request,因此是否可以将其转换或

这是我当前的代码

我已将此路由添加到/routes/api.php中

Route::group(['namespace' => 'API'],function() {
    Route::get('/test',"testAPIController@get");
    Route::get('macro.test', ['as' => 'macro.test', 'uses' => 'testAPIController0@get']);
});
我已将Route::宏添加到/app/providers/RouteServiceProvider.php:

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        Route::macro(
            'sendToRoute',
            function (Request $request, string $routeName) {
                $route = tap($this->routes->getByName($routeName))->bind($request);
                $this->current = $route;
                return $this->runRoute($request, $this->current);
            }
        );

        parent::boot();
    }
调用宏的控制器:

<?php
namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;
use Route;

class testAPIController extends AppBaseController
{
    public function get(Request $request)
    {
        return Route::sendToRoute($request,"macro.test");
    }
}
?>

目标控制器:

<?php
namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;

class testAPIController0 extends AppBaseController
{
    public function get(Request $request) {
        die("Hello World");
    }
}
?>

在宏函数的定义中,您应该注册
照亮\Http\Request
,而不仅仅是
请求
。像这样:

/**
*定义路由模型绑定、模式过滤器等。
*
*@返回无效
*/
公共函数boot()
{
路由::宏(
“sendToRoute”,
函数(\Illumb\Http\Request$Request,字符串$routeName){
$route=tap($this->routes->getByName($routeName))->bind($request);
$this->current=$route;
返回$this->runRoute($request,$this->current);
}
);
父::boot();
}

当然,您也可以导入php文件顶部的
illumb\Http\Request

Saeid-您是一个传奇!!哈哈,太简单了。我整天都在挠头尝试不同的事情。谢谢!!:)