使用Symfony表单

时间:2016-05-02 07:23:05

标签: php symfony symfony-forms

评级是非常简单,直观的,并且不需要用户太多考虑,特别是当它被设计为“星星”时(在我的情况下,它是最着名的评级系统,从1到5)。这通常与评级小部件的实现方式形成对比 - 最流行的解决方案是使用表单或使用链接。由于存在一些问题,特别是搜索引擎如何查看页面和链接,因此强烈建议不要使用后者。

所以我选择按表单实现评级小部件:从技术角度来看,它由5个“提交”按钮组成,动作方法只根据哪个来分配评级(1,2,3,4,5)用户点击了提交按钮。我暂时不使用Ajax。

简单?我希望如此。出现问题的原因是PHP-Symfony2(或通常是Web语言)平台如何处理表单:当表单时间到期时,它将不会被验证!从用户或用户体验的角度来看,这是一个非常非常糟糕的事情 - 他或她点击并期望评级发生。我没有在网上看到任何网站(例如,想象一下带有“赞”按钮的Facebook),它会显示“令牌已过期,请重新提交表单”等消息。

如何在评级等情况下处理表单过期,用户应始终提交此类表单,尽管验证是一个不应被放弃的过程?或者我应该忽略验证,至少在令牌的情况下?

1 个答案:

答案 0 :(得分:0)

当会话持久存储在缓存中时,我遇到了类似的问题。每当我更新网站并清除缓存时,会话都会被销毁,令牌也会失效。

现在sessions are stored in the database我还没有看到这个问题。以下是相关配置:

app/config/config.yml

framework:
    session:
        # ...
        handler_id: session.handler.pdo

services:
    session.handler.pdo:
        class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
        public:    false
        arguments:
            - 'mysql:host=%database_host%;port=%database_port%;dbname=%database_name%'
            - { db_username: '%database_user%', db_password: '%database_password%' }

必须创建sessions表,以下是如何使用MySQL数据库:

CREATE TABLE `sessions` (
    `sess_id` VARBINARY(128) NOT NULL PRIMARY KEY,
    `sess_data` BLOB NOT NULL,
    `sess_time` INTEGER UNSIGNED NOT NULL,
    `sess_lifetime` MEDIUMINT NOT NULL
) COLLATE utf8_bin, ENGINE = InnoDB;