网址段的PHP Slim缺少数据:ID

时间:2018-07-19 09:17:51

标签: php slim-3

当表单发布显示错误时,我想按ID更新用户帐户

错误:

  

在消息D:\ Server \ Wamp \ www \ php-slim \ vendor \ slim \ slim \ Slim \ Router.php:401中出现异常'InvalidArgumentException'并显示消息'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'));
}

1 个答案:

答案 0 :(得分:1)

您的路线

$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));

pathFor()类的方法Slim\Router需要一个强制参数和两个可选参数。

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

建议:您应尝试使用其他名称来区分路由。