防止使用Laravel 4创建多个条目

防止使用Laravel 4创建多个条目,laravel,laravel-4,Laravel,Laravel 4,当快速点击提交按钮时,如何防止多次提交 这是我的商店功能: public function store() { $input = Input::except('_token'); $country = new Country($input); $country->save(); } 我考虑过为唯一ID添加验证。但我认为,如果同一方法执行多次,每个国家/地区的实例将不同,因此将有不同的ID,因此无论如何都会创建条目。无论如何,我不喜欢在这种情况下使用验证的想法 我

当快速点击提交按钮时,如何防止多次提交

这是我的商店功能:

public function store()
{
    $input = Input::except('_token');
    $country = new Country($input);

    $country->save();
}
我考虑过为唯一ID添加验证。但我认为,如果同一方法执行多次,每个国家/地区的实例将不同,因此将有不同的ID,因此无论如何都会创建条目。无论如何,我不喜欢在这种情况下使用验证的想法

我有一种方法可以防止在更新实体时多次提交:

public function updatePost(Post $post) {
    if (count($post->getDirty()) > 0) {
        $post->save();
        return Redirect::back()->with('success', 'Post is updated!');
    } else {
        return Redirect::back()->with('success', 'Nothing to update!');
    }
}
但是,在存储新实体时,它不会有任何帮助

我已经搜索了一段时间,没有直接找到任何东西

处理这个问题的通常方法是什么


编辑。尝试使用,但我得到了同样的结果。

< P>我认为这里有一个你可以考虑的方法组合。 首先,我肯定地说,可以应用强制唯一性的模型规则来保护应用程序的数据完整性

第二,为了防止这种情况发生,您可能想看看一个简单的Javascript函数的实现,该函数在单击后禁用提交按钮。

以下是我的方法:

public function store()
{
    $input = Input::except('_token');
    $host = gethostname();

    // Using -1 for $last_update will always ensure that the next line is true if no
    //   entry exists
    $last_update = Session::has($host) ? Session::get($host) : -1;

    // If no entry exists (-1), then the below statement will always be true!
    $allow_entry = (microtime() - $last_update) > $SOME_TIME;

    if ($allow_entry)
    {
        $country = new Country($input);
        $country->save(); 

        // Only update the Session if an entry was inserted
        Session::put($host) = microtime();
    }  
}

基本上,您使用的会话的密钥是用户的主机名。值是输入的时间。

重复?我看到了,但没有帮助。答案上有一条评论说答案中的选项不是选项。会话::放置“U令牌”、SHA1微时间和重定向::路由“表单/成功”->withdata,$myData都需要完成。你需要做Session::把“u token”放在存储的开头,顺便问一下,为什么你不能使用另一个stackoverflow的方法呢?保存数据库输入的IP/时间。如果同一IP在预定义的时间内请求了另一个条目,那么拒绝它为这种事情使用JavaScript是一个糟糕的主意,因为用户可能会禁用它,并且问题将持续存在