php - URL段的php slim丢失数据:id
问题描述
当表单发布显示错误时,我想通过 id 更新用户帐户
错误:
在 D:\Server\Wamp\www\php-slim\vendor\slim\slim\Slim\Router.php:401 中出现异常 'InvalidArgumentException' 和消息 'Missing data for URL segment: 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));
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
建议:您应该尝试使用不同的名称来区分路线。
推荐阅读
- neo4j - 使用 Cypher 使用整数数组在 Neo4j 中创建多个关系
- vbscript - 使用 VBScript 将多个 word 文档同时转换为多个 PDF
- python - 我不明白为什么我以后不能使用 user_choice 作为它的“未定义”
- python - 过滤数组数组
- node.js - node.js 不和谐机器人使用输入作为机器人输出和反应
- python - 将 DataFrame 插入雪花时,snowflake.connector.errors.ProgrammingError: 001003 (42000)
- javascript - 尝试在我的业务关闭时更改链接的路径
- numpy - 如何在 Python 中将点 (x,y,z) 投影到 (x,y) 上?
- c# - POST 控制器操作方法的 LIST 返回计数 = 0
- python - 如何保存从 Django 模型中的模板获取的对象列表?