提问人:exoexo 提问时间:10/22/2023 最后编辑:exoexo 更新时间:10/23/2023 访问量:65
PHP Symfony 6.3.5:创建表单时无法调用默认会话处理程序
PHP Symfony 6.3.5: Cannot call default session handler when creating a form
问:
我正在使用 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 美元时,一切正常。
答:
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(),
]);
更新: 也许它来自您的配置。以下是您可以检查的内容:
- PHP配置:确保PHP会话模块配置正确。检查您的 php.ini 文件以确保会话设置正确无误,尤其是与 session.save_handler 和 session.save_path 相关的设置。
- 权限:如果您使用的是默认会话处理程序(文件),请确保session.save_path中设置的目录具有 Web 服务器的写入权限。权限问题是导致此类错误的常见原因。
- Symfony配置:检查config/packages/framework.yaml(或相应的文件)中的会话配置是否正确。 下面是一个默认配置示例:
framework:
session:
handler_id: session.handler.native_file
save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%"
如果您使用的是其他会话处理程序(如 Redis 或数据库),请确保该处理程序已正确配置且可操作。
依赖项:确保已安装所有必要的依赖项,尤其是在使用默认文件以外的会话处理程序时。例如,如果您将 Redis 用于会话,请确保安装了 PHP Redis 包和相应的 Symfony 库。
调试:使用Symfony网络分析工具(Web Profiler)来更深入地了解错误。这可以为您提供有关问题所在的额外线索。
日志:查看 Symfony 日志以获取有关错误的更多详细信息。这些见解通常可以直接指向问题所在。
评论
0赞
exoexo
10/23/2023
我正在使用 6.3.5,因此使用 createView() 不应该做任何事情,但我还是尝试了,但我仍然遇到同样的错误。
0赞
exoexo
10/23/2023
伟大!感谢您回答我的问题。您的更新成功了。问题确实来自Symfony的配置
0赞
Skuti
10/23/2023
很棒的@exoexo!然后将其标记为为其他人解决
评论