php slim缺少URL段的数据:id

php slim缺少URL段的数据:id,php,slim-3,Php,Slim 3,当表单post显示错误时,我希望按id更新用户帐户 错误: 异常“InvalidArgumentException”,在D:\Server\Wamp\www\php slim\vendor\slim\slim\slim\Router.php:401中显示消息“缺少URL段的数据:id” 堆栈跟踪: php路由代码 $app->group('/admin/users', function () { $this->get('', 'UsersController:index')-

当表单post显示错误时,我希望按id更新用户帐户

错误:

异常“InvalidArgumentException”,在D:\Server\Wamp\www\php slim\vendor\slim\slim\slim\Router.php:401中显示消息“缺少URL段的数据:id” 堆栈跟踪:

php路由代码

$app->group('/admin/users', function () {
    $this->get('', 'UsersController:index')->setName('admin.user.index');
    $this->get('/edit/{id:[0-9]+}', 'UsersController:getEditUser')->setName('admin.user.edit');
    $this->post('/edit/{id:[0-9]+}', 'UsersController:postEditUser')->setName('admin.user.edit');
})->add(new AdminMiddleware($container));
控制器功能

public function postEditUser($request, $response, $args) {
   $user = User::find($args['id']);
   $this->flash->addMessage('success', 'User [ ' . $user['display_name'] . ' ] was update');
   return $response->withRedirect($this->router->pathFor('admin.user.index'));
}
你的路线

$this->get('/edit/{id:[0-9]+}', 'UsersController:getEditUser')->setName('admin.user.edit');
您需要将
id
数据传递到
pathFor()
方法。所以不是

return $response->withRedirect($this->router->pathFor('admin.user.index'));
您应该像下面的代码那样调用它

return $response->withRedirect($this->router->pathFor(
    'admin.user.index', 
    ['id' => $args['id']]
));
或者干脆

return $response->withRedirect($this->router->pathFor('admin.user.index', $args));
类的
Slim\Router
方法
pathFor()
需要一个必需参数和两个可选参数

public function pathFor($name, array $data = [], array $queryParams = [])
$data
参数用于传递路由参数,
$queryParams
用于查询字符串参数

所以如果你用以下参数调用它

$url = $this->router->pathFor('admin.user.index', 
    ['id' => 123 ],
    [
       'a' => 4,
       'b' => 5
    ]
);
$url
将包含字符串
[base path]/admin/users/edit/123?a=4&b=5


建议:您应该尝试使用不同的名称来区分路线

您要点击哪个url来保存信息?代码看起来不错,您确定表单发布到了正确的url吗?确保表单post看起来像
。我将方法设为“post”,但它不起作用