问题
fos用户捆绑式表单(登录,注册,...)工作正常,但我自己的表格却不是:
CSRF令牌无效。请尝试重新提交表格
我试图创建一个资源:
http://www.project.local/app_dev.php/developer/new
甚至:
http://www.project.local/developer/new
环境
- OS X El Capitan 64位
- Web服务器:
- 服务器:Apache 2.4.16
- 服务器API:Apache 2.0处理程序(MOD_PHP7)
- 线程安全:禁用
- 文档根:
/Library/WebServer/Documents/project/web
- PHP:
7.1.2
- Symfony:
3.2.*
- 使用的代码库使用
-
$ symfony new project
-
$ php app/console generate:doctrine:crud
-
- fos用户 - bundle:
~2.0@dev
- knp菜单捆绑包:
^2.0
app/config/config.yml
framework:
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
trusted_hosts: ~
trusted_proxies: ~
session:
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- 'form/form_div_layout.html.twig'
app/config/security.yml
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
developercontroller
public function newAction(Request $request)
{
$developer = new Developer();
$form = $this->createForm(DeveloperType::class, $developer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($developer);
$em->flush($developer);
return $this->redirectToRoute('developer_show', array('id' => $developer->getId()));
}
return $this->render('BackendBundle:Developer:new.html.twig', array(
'developer' => $developer,
'form' => $form->createView(),
));
}
developertype
class DeveloperType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('user');
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Developer::class
));
}
public function getBlockPrefix() {
return 'backendbundle_developer';
}
}
表格 - 模板
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" name="{{ form.vars.name }}">Create</button>
{{ form_end(form) }}
表格 - 生成
该表格始终具有隐藏的 ( 谷歌搜索了几个小时,并在堆栈溢出上阅读所有类似的问题,包括上述 重新检查文件系统权限 会话文件是在 更改 to 根本没有成功。 这不是这些类似问题的重复: symfony2 csrf无效 Symfony 3.0.1 CSRF代币存在,但无效 CSRF令牌无效。请尝试重新提交表格 symfony2:CSRF令牌无效。请尝试重新提交表格 Symfony2 CSRF令牌无效。请尝试重新提交表格 " CSRF令牌是无效的" Symfony 2中的错误,即使使用Form_rest(form)函数 symfony isvalid false csrf代币无效 Symfony 2. CSRF令牌无效_token
输入字段 Present <form name="form_name" method="post" class="ui form">
<input type="hidden" name="form_name[_token]" value="YefVvhSvvNTItjw7ayDFwFi4sdf_6oOvsQjnUu9X7cw">
<button type="submit" name="form_name">Create</button>
</form>
form_name
等于backendbundle_developer
)我做了什么?
httpd
进程在_www
用户下运行,因此:sudo chown -R _www var/
sudo chmod -R 775 var/
var/sessions/
下成功创建和更新的app/config/config.yml
条目session:
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
session:
handler_id: session.handler.native_file
save_path: ~
类似的问题
您应该更改此
<button type="submit" name="form_name">Create</button>
使用此
<button type="submit" name="form_name[submit]">Create</button>