public function check(string $key, int $capacity, int $seconds, int $cost = 1): bool
	{
		$tokenName = $this->prefix . $key;

		// Check to see if the bucket has even been created yet.
		if (($tokens = $this->cache->get($tokenName)) === false)
		{
			// If it hasn't been created, then we'll set it to the maximum
			// capacity - 1, and save it to the cache.
			$this->cache->save($tokenName, $capacity - $cost, $seconds);
			$this->cache->save($tokenName . 'Time', time());

			return true;
		}

		// If $tokens > 0, then we need to replenish the bucket
		// based on how long it's been since the last update.
		$throttleTime = $this->cache->get($tokenName . 'Time');
		$elapsed      = $this->time() - $throttleTime;
		// Number of tokens to add back per second
		$rate = $capacity / $seconds;

		// We must have a minimum wait of 1 second for a new token
		// Primarily stored to allow devs to report back to users.
		$this->tokenTime = max(1, $rate);

		// Add tokens based up on number per second that
		// should be refilled, then checked against capacity
		// to be sure the bucket didn't overflow.
		$tokens += $rate * $elapsed;
		$tokens  = $tokens > $capacity ? $capacity : $tokens;

		// If $tokens > 0, then we are save to perform the action, but
		// we need to decrement the number of available tokens.
		$response = false;

		if ($tokens > 0)
		{
			$response = true;

			$this->cache->save($tokenName, $tokens - $cost, $elapsed);
			$this->cache->save($tokenName . 'Time', time());
		}

		return $response;
	}
public function check(string $key, int $capacity, int $seconds, int $cost = 1): bool
	{
		$tokenName = $this->prefix . $key;

		// Check to see if the bucket has even been created yet.
		if (($tokens = $this->cache->get($tokenName)) === false)
		{
			// If it hasn't been created, then we'll set it to the maximum
			// capacity - 1, and save it to the cache.
			$this->cache->save($tokenName, $capacity - $cost, $seconds);
			$this->cache->save($tokenName . 'Time', time());

			return true;
		}

		// If $tokens > 0, then we need to replenish the bucket
		// based on how long it's been since the last update.
		$throttleTime = $this->cache->get($tokenName . 'Time');
		$elapsed      = $this->time() - $throttleTime;
		// Number of tokens to add back per second
		$rate = $capacity / $seconds;

		// We must have a minimum wait of 1 second for a new token
		// Primarily stored to allow devs to report back to users.
		$this->tokenTime = max(1, $rate);

		// Add tokens based up on number per second that
		// should be refilled, then checked against capacity
		// to be sure the bucket didn't overflow.
		$tokens += $rate * $elapsed;
		$tokens  = $tokens > $capacity ? $capacity : $tokens;

		// If $tokens > 0, then we are save to perform the action, but
		// we need to decrement the number of available tokens.
		$response = false;

		if ($tokens > 0)
		{
			$response = true;

			$this->cache->save($tokenName, $tokens - $cost, $elapsed);
			$this->cache->save($tokenName . 'Time', time());
		}

		return $response;
	}
public function check ( string $ key , int $ capacity , int $ seconds , int $ cost = 1 ) : bool { $ tokenName = $ this -> prefix . $ key ; // Check to see if the bucket has even been created yet. if ( ( $ tokens = $ this -> cache -> get ( $ tokenName ) ) === false ) { // If it hasn't been created, then we'll set it to the maximum // capacity - 1, and save it to the cache. $ this -> cache -> save ( $ tokenName , $ capacity - $ cost , $ seconds ) ; $ this -> cache -> save ( $ tokenName . 'Time' , time ( ) ) ; return true ; } // If $tokens > 0, then we need to replenish the bucket // based on how long it's been since the last update. $ throttleTime = $ this -> cache -> get ( $ tokenName . 'Time' ) ; $ elapsed = $ this -> time ( ) - $ throttleTime ; // Number of tokens to add back per second $ rate = $ capacity / $ seconds ; // We must have a minimum wait of 1 second for a new token // Primarily stored to allow devs to report back to users. $ this -> tokenTime = max ( 1 , $ rate ) ; // Add tokens based up on number per second that // should be refilled, then checked against capacity // to be sure the bucket didn't overflow. $ tokens += $ rate * $ elapsed ; $ tokens = $ tokens > $ capacity ? $ capacity : $ tokens ; // If $tokens > 0, then we are save to perform the action, but // we need to decrement the number of available tokens. $ response = false ; if ( $ tokens > 0 ) { $ response = true ; $ this -> cache -> save ( $ tokenName , $ tokens - $ cost , $ elapsed ) ; $ this -> cache -> save ( $ tokenName . 'Time' , time ( ) ) ; } return $ response ; }
Restricts the number of requests made by a single IP address within
a set number of seconds.

Example:

if (! $throttler->check($request->ipAddress(), 60, MINUTE))
{
die('You submitted over 60 requests within a minute.');
}

@param string  $key      The name to use as the "bucket" name.
@param integer $capacity The number of requests the "bucket" can hold
@param integer $seconds  The time it takes the "bucket" to completely refill
@param integer $cost     The number of tokens this action uses.

@return   boolean
@internal param int $maxRequests
Restricts the number of requests made by a single IP address within a set number of seconds .