我正在使用Laravel,我有一个包含两个表的数据库:在第一个表中有一个包含整数字段的列,我希望像计时器一样工作,在用户提交的第二个表中存储一个表单,并有一个时间戳与提交时间。 我想阻止用户在第一个表中字段指定的时间到期之前提交相同的表单。 我怎么能这样做?
以下是控制器中的代码:
public function getShow($id = null){
if ( ! is_null($id)){
$submitted = Actionshistory::where('action_id','=',$id)->first()->created_at;
$minutes = Actions::where('id','=',$id)->pluck('time_need'); // time need between submit two same form.
$passed = Carbon::createFromTimeStamp($submitted)->diffInMinutes(Carbon::now('Europe/Rome'));
if ($submitted && $passed >= $minutes)
{
// Other queries and success message
}
// Error message
}
// error message for id
}
我需要使用Carbon::now('Europe/Rome')
。
感谢。
答案 0 :(得分:0)
没有看到你的代码,没有具体的答案。这是让你入门的东西:
$submitted = Actionshistory::where('action_id', $id)->first()->created_at;
$interval = Actions::where('id','=',$id)->pluck('time_need');
if ($submitted->diffInMinutes(Carbon::now()) < $interval)
{
// throw your error or whatnot
}
答案 1 :(得分:0)
创建一个隐藏的输入,其中包含表单的服务时间。
Form::hidden('time_served', Carbon::now());
您需要在表单的onsubmit事件中使用ajax来检查时间是否有效并返回true或false,这将停止或让表单提交继续。
javascript看起来像......
$(document).ready(function() {
$('#MyForm').on('submit', function(e) {
$.getJSON('some/route', {}, function(data, textStatus) {
if(data.success) {
return true;
} else {
alert(data.message);
return false;
}
});
});
});
现在,返回json的some/route
路由看起来类似于......
Route::get('some/route', function()
{
$time_served = Input::get('time_served');
$difference = Carbon::createFromTimeStamp($time_served)->diffInSeconds(Carbon::now());
$seconds_allowed = Config::get('timers.seconds'); // However you get your "timer"
if($seconds_allowed > $difference) {
return Response::json(array('success' => true, 'message' => 'Time requirement met.'));
} else {
return Response::json(array('success' => false, 'message' => 'Time requirement not met.'));
}
});