2014-07-26 3 views
0

제출 단추가 매우 빠르게 칠 때 여러 제출을 방지하려면 어떻게합니까?Laravel 4를 사용하여 여러 항목 생성 금지

이 내 store 기능입니다 :

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

    $country->save(); 
} 

내가 고유 ID에 대한 유효성 검사를 추가하는 방법에 대해 생각했다. 하지만 같은 방법을 여러 번 실행하면 각각 Country 인스턴스가 달라 지므로 다른 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!'); 
    } 
} 

그러나, getDirty() 어떤 도움이되지 않을 것 : 엔티티를 업데이트 할 때 여러 제출을 방지 주위

는 뭔가가있다.

나는 잠시 동안 검색을 해왔지만 나는 곧장 아무것도 찾지 못했습니다.

이 문제를 해결하는 일반적인 방법은 무엇입니까?

편집. Redirect::route()을 사용해 보았지만 같은 결과가 나왔습니다.

+0

중복 된 http://stackoverflow.com/questions/17239586/laravel-4-prevent-multiple-form-submissions-csrf-token? – Unnawut

+0

나는 그것을 보았고 도움이되지 않습니다. – dabadaba

+0

답변에있는 옵션이 옵션이 아니라는 답변에 대한 의견이 있습니다. Session :: put ('_ 토큰', sha1 (마이크로 시간()))'과'Redirect :: route ('form/success') -> with ("data", $ myData)'둘 다 수행되어야합니다. 그리고'store()'의 처음에'Session :: put ('_ token', sha1 (microtime()))'을 할 필요가 있습니다. – Unnawut

답변

0

내가 생각할 수있는 접근 방법의 조합이 여기 있다고 생각합니다.

먼저, 고유성을 적용하는 모델 규칙을 적용하여 앱의 데이터 무결성을 보호 할 수 있다고 분명히 말할 수 있습니다.

두 번째로 이러한 문제를 방지하기 위해 한 번의 클릭으로 제출 단추를 비활성화하는 간단한 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(); 
    } 
} 

는 기본적으로, 당신은 키가 사용자의 hostname 인으로 Session를 사용

+0

을 거부하십시오. – dabadaba

0

여기 내 접근 방식입니다. 그리고 그 가치는 진입의 시간입니다.

관련 문제