Php 如何从Silex中的表单数据中筛选html
我对Silex和Symfony非常陌生,我正在尝试使用Symfony表单组件创建一个表单。这很好,但说到验证/消毒,我不知道怎么做 当然我知道$app->escape($data)方法,但它似乎不适合我的需要 在调用$form->isValid()方法之前,我希望从提交的数据中转义html标记。我不想用html标记使文本无效,只需从文本中转义/删除它们,然后验证获得的值 所以基本上我想给表单赋转义值,而不是原始值或使用值 我的问题是,仅当删除html标记后提交的文本为空时,我才希望显示错误消息 我考虑编写一个自定义约束—因为我在包中没有找到任何关于html验证的内容—但在这种情况下,我必须过滤/转义两次,首先在验证中,然后在保存数据之前 我想实现这样的目标:Php 如何从Silex中的表单数据中筛选html,php,symfony,escaping,silex,Php,Symfony,Escaping,Silex,我对Silex和Symfony非常陌生,我正在尝试使用Symfony表单组件创建一个表单。这很好,但说到验证/消毒,我不知道怎么做 当然我知道$app->escape($data)方法,但它似乎不适合我的需要 在调用$form->isValid()方法之前,我希望从提交的数据中转义html标记。我不想用html标记使文本无效,只需从文本中转义/删除它们,然后验证获得的值 所以基本上我想给表单赋转义值,而不是原始值或使用值 我的问题是,仅当删除html标记后提交的文本为空时,我才希望显示错误消息
if ($request->getMethod() == 'POST') {
$comment = $request->get('comment');
if($comment) {
foreach($comment as &$value) {
$value = $app->escape($value);
}
$cleared = new Request(array(), array('comment' => $comment));
$form->bindRequest($cleared);
if ($form->isValid()) {
var_dump($form->getData());
}
}
}
谢谢。只是一个快捷方式,您必须使用函数删除html标记
我的问题是,我只想在
删除html标记后,提交的文本为空
例如:
if ($request->getMethod() == 'POST') {
$comment = $request->get('comment');
if($comment) {
$emptyCM = false;
foreach($comment as &$value) {
$value = strip_tags($value);
if (empty($value)) $emptyCM = true;
}
if ($emptyCM)
$form->get('comment')->addError(new Form\FormError('my custom error message'));
$cleared = new Request(array(), array('comment' => $comment));
$form->bindRequest($cleared);
if ($form->isValid()) {
var_dump($form->getData());
}
}
}
如果要在数据进入表单之前对其进行预清理,可以对所有路由或特定路由使用
before
过滤器
下面的示例从GET和POST的字符串参数中删除所有标记。如果参数是数组(如初始示例中所示),则需要添加另一个If
分支。如果参数嵌套很深,则需要递归函数进行过滤
$app->before( function( Request $request ) {
foreach ( [ $request->request, $request->query ] as $parameterBag ) {
foreach ( $parameterBag->keys() as $key ) {
if ( is_string( $parameterBag->get( $key ) ) ) {
$parameterBag->set( $key, strip_tags( $parameterBag->get( $key ) ) );
}
}
}
}, Application::EARLY_EVENT );
谢谢你的回答,我希望有一个内置的支持过滤输入。类似于约束,但这应该会清除值。
$app->before( function( Request $request ) {
foreach ( [ $request->request, $request->query ] as $parameterBag ) {
foreach ( $parameterBag->keys() as $key ) {
if ( is_string( $parameterBag->get( $key ) ) ) {
$parameterBag->set( $key, strip_tags( $parameterBag->get( $key ) ) );
}
}
}
}, Application::EARLY_EVENT );