PHP Symfony 6.3.5:创建表单时无法调用默认会话处理程序

PHP Symfony 6.3.5: Cannot call default session handler when creating a form

提问人:exoexo 提问时间:10/22/2023 最后编辑:exoexo 更新时间:10/23/2023 访问量:65

问:

我正在使用 Symfony 6.3.5 的 createForm() 创建一个表单

$form = $this->createForm(ContactType::class, new Contacts);
$form->handleRequest($request);

return $this->render('Contacts/BlankSlate.html.twig', [
    'active' => 'Contacts',
    'form' => $form
]);

呈现表单时,出现以下错误:

无法调用默认会话处理程序

我创建了一个名为“ContactType”的表单类型:

namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

class ContactType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->add('name', TextType::class);
    }
}

我尝试过手动创建表单以及使用表单构建器。我还尝试从请求会话中写入和读取,并得到相同的错误。当我使用 _SESSION 美元时,一切正常。

PHP 表单 symfony 会话

评论


答:

0赞 Skuti 10/22/2023 #1

您应该调用 createView 方法:

<?php

$form = $this->createForm(ContactType::class, new Contacts);

return $this->render('Contacts/BlankSlate.html.twig', [
    'active' => 'Contacts',
    'form' => $form->createView(),
]);

更新: 也许它来自您的配置。以下是您可以检查的内容:

  1. PHP配置:确保PHP会话模块配置正确。检查您的 php.ini 文件以确保会话设置正确无误,尤其是与 session.save_handler 和 session.save_path 相关的设置。
  2. 权限:如果您使用的是默认会话处理程序(文件),请确保session.save_path中设置的目录具有 Web 服务器的写入权限。权限问题是导致此类错误的常见原因。
  3. Symfony配置:检查config/packages/framework.yaml(或相应的文件)中的会话配置是否正确。 下面是一个默认配置示例:
framework:
    session:
        handler_id: session.handler.native_file
        save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%"

如果您使用的是其他会话处理程序(如 Redis 或数据库),请确保该处理程序已正确配置且可操作。

  1. 依赖项:确保已安装所有必要的依赖项,尤其是在使用默认文件以外的会话处理程序时。例如,如果您将 Redis 用于会话,请确保安装了 PHP Redis 包和相应的 Symfony 库。

  2. 调试:使用Symfony网络分析工具(Web Profiler)来更深入地了解错误。这可以为您提供有关问题所在的额外线索。

  3. 日志:查看 Symfony 日志以获取有关错误的更多详细信息。这些见解通常可以直接指向问题所在。

评论

0赞 exoexo 10/23/2023
我正在使用 6.3.5,因此使用 createView() 不应该做任何事情,但我还是尝试了,但我仍然遇到同样的错误。
0赞 exoexo 10/23/2023
伟大!感谢您回答我的问题。您的更新成功了。问题确实来自Symfony的配置
0赞 Skuti 10/23/2023
很棒的@exoexo!然后将其标记为为其他人解决