Php 如何覆盖laravel资源路由默认方法?

Php 如何覆盖laravel资源路由默认方法?,php,rest,laravel,Php,Rest,Laravel,我的REST API URL有以下模式: Verb Url Method GET /tasks findAll GET /tasks/{id} findOne POST /tasks create PUT /tasks/{id} update

我的REST API URL有以下模式:

Verb    Url                         Method

GET     /tasks                      findAll   
GET     /tasks/{id}                 findOne    
POST    /tasks                      create   
PUT     /tasks/{id}                 update    
DELETE  /tasks/{id}                 deleteOne
DELETE  /tasks                      deleteAll
是否有方法覆盖路由资源Laravel内置方法(存储、创建、编辑等)的默认方法,并使用与控制器关联的单行自定义路由创建路由

例如:

Route::resource('/tasks', 'TasksController');
而不是:

Route::get('/tasks', 'TasksController@findAll');
Route::get('/tasks/{id}', 'TasksController@findOne');
Route::post('/tasks', 'TasksController@create');
Route::put('/tasks/{id}', 'TasksController@update');
Route::delete('/tasks', 'TasksController@deleteAll');
Route::delete('/tasks/{id}', 'TasksController@deleteOne');

您应该在此处查看Laravel文档:

关于deleteAll操作,Laravel没有为此提供默认调用。 我建议避免这种情况

要创建资源控制器,只需在终端上键入以下命令:

php artisan make:controller TasksController --resource
这将创建一个带有默认CRUD操作的控制器,您必须填充该操作

然后在routes.php中添加:

Route::resource('tasks', 'TasksController');

您将能够像您描述的那样向服务器发送调用。

我已经解决了通过更改resourceRegistrator.php类来执行这些步骤的问题,这实现了我的请求。(由@Thomas Van der Veen推荐):

1) 我已将$resourceDefaults数组替换为我的方法:

protected $resourceDefaults = ['findAll', 'findOne', 'create', 'update', 'deleteOne', 'deleteAll'];
2) 在我创建了执行操作的方法之后,删除旧的

    protected function addResourceFindAll($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name);

    $action = $this->getResourceAction($name, $controller, 'findAll', $options);

    return $this->router->get($uri, $action);
}

protected function addResourceFindOne($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name).'/{'.$base.'}';

    $action = $this->getResourceAction($name, $controller, 'findOne', $options);

    return $this->router->get($uri, $action);
}

protected function addResourceCreate($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name);

    $action = $this->getResourceAction($name, $controller, 'create', $options);

    return $this->router->post($uri, $action);
}

protected function addResourceUpdate($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name).'/{'.$base.'}';

    $action = $this->getResourceAction($name, $controller, 'update', $options);

    return $this->router->put($uri, $action);
}

protected function addResourceDeleteAll($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name);

    $action = $this->getResourceAction($name, $controller, 'deleteAll', $options);

    return $this->router->delete($uri, $action);
}

protected function addResourceDeleteOne($name, $base, $controller, $options)
{
    $uri = $this->getResourceUri($name).'/{'.$base.'}';

    $action = $this->getResourceAction($name, $controller, 'deleteOne', $options);

    return $this->router->delete($uri, $action);
}

就是这样,效果很好

您可以查看。谢谢,但这是用于在不覆盖默认方法的情况下添加其他路由操作。很抱歉,您必须向下滚动到某个位置。对于每个新方法,您都会创建一个类似于
addResourceData()
的方法,并在
protected$resourceDefaults=[…]
中添加这些方法。在
$resourcefaults
@ThomasVanderVeen good中删除不需要的内容这似乎是我想要的,谢谢!你好,谢谢你的回复。Laravel默认操作包含我不需要的操作(例如显示和编辑)。我已经解决了覆盖ResourceRegistrator.php类以进行更改和删除不必要的laravel操作的问题。