在Laravel中为资源控制器添加新的方法。

11 浏览
0 Comments

在Laravel中为资源控制器添加新的方法。

我想知道在Laravel中是否可以添加新的方法到资源控制器中,以及如何操作。

我知道这些方法是默认的(index、create、store、edit、update、destroy)。现在我想添加额外的方法和路由到同一个控制器中。

这是可能的吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

是的,这是可能的。

在我的案例中,我添加了一个名为“data”的方法来处理HTTP POST方法中的“/data.json”请求。

这是我所做的。

首先,我们扩展Illuminate\Routing\ResourceRegistrar以添加新方法data

getResourceUri($name).'/data.json';
        $action = $this->getResourceAction($name, $controller, 'data', $options);
        return $this->router->post($uri, $action);
    }
}

之后,创建您的新的ServiceProvider或者使用AppServiceProvider

在方法boot中,添加以下代码:

    public function boot()
    {
        $registrar = new \App\MyCustom\Routing\ResourceRegistrar($this->app['router']);
        $this->app->bind('Illuminate\Routing\ResourceRegistrar', function () use ($registrar) {
            return $registrar;
        });
    }

然后:

将其添加到您的路线中:

Route::resource('test', 'TestController');

通过php artisan route:list进行检查,您将找到新的方法'data'

0
0 Comments

在注册资源之前,单独为该方法添加一个路由:

Route::get('foo/bar', 'FooController@bar');
Route::resource('foo', 'FooController');

0