每天laravel-20160701|Repository

<?php

namespace Illuminate\Cache;

use Closure;
use DateTime;
use ArrayAccess;
use Carbon\Carbon;
use BadMethodCallException;
use Illuminate\Contracts\Cache\Store;
use Illuminate\Support\Traits\Macroable;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Contracts\Cache\Repository as CacheContract;
// a namespace be used enough
class Repository implements CacheContract, ArrayAccess
{// two interface that should be implements by Repository
    use Macroable {
        __call as macroCall;
    }// use Macroable that we will be a __call

    /**
     * The cache store implementation.
     * The cache store
     * @var \Illuminate\Contracts\Cache\Store
     */
    protected $store;// a Cache Store instance of the implementation

    /**
     * The event dispatcher implementation.
     *
     * @var \Illuminate\Contracts\Events\Dispatcher
     */
    protected $events;// The event dispatcher implementation a events interface

    /**
     * The default number of minutes to store items.
     *
     * @var int
     */
    protected $default = 60; // a normal time[minutes]or[seconds] to set the value into the store items .
   // normal set it is 60 second

    /**
     * Create a new cache repository instance.
     *
     * @param  \Illuminate\Contracts\Cache\Store  $store
     * @return void
     */
    public function __construct(Store $store)
    {
        $this->store = $store;
    }// a big __set to Create a new instance about Cache, repository
   // a library to store.

    /**
     * Set the event dispatcher instance.
     *
     * @param  \Illuminate\Contracts\Events\Dispatcher  $events
     * @return void
     */
    public function setEventDispatcher(Dispatcher $events)
    {
        $this->events = $events;
    }// Set the event dispatcher instance.
   // a big set to the events.

    /**
     * Fire an event for this cache instance.
     *
     * @param  string  $event
     * @param  array  $payload
     * @return void
     */
   // Fire an event for this cache instance.
    protected function fireCacheEvent($event, $payload)// fire cache event
    {
        if (! isset($this->events)) {
            return;
        }// check this is a normal events

        switch ($event) {// this->events is a instance about a class, then the events is a way or a type
            case ‘hit‘:// case hit:
                if (count($payload) == 2) {
                    $payload[] = [];
                }

                return $this->events->fire(new Events\CacheHit($payload[0], $payload[1], $payload[2]));
            case ‘missed‘:// case missed:
                if (count($payload) == 1) {
                    $payload[] = [];
                }

                return $this->events->fire(new Events\CacheMissed($payload[0], $payload[1]));
            case ‘delete‘:// case delete:
                if (count($payload) == 1) {
                    $payload[] = [];
                }

                return $this->events->fire(new Events\KeyForgotten($payload[0], $payload[1]));
            case ‘write‘:// cache write:
                if (count($payload) == 3) {
                    $payload[] = [];
                }

                return $this->events->fire(new Events\KeyWritten($payload[0], $payload[1], $payload[2], $payload[3]));
        }
    }// a switch way to change the result

    /**
     * Determine if an item exists in the cache.
     *
     * @param  string  $key
     * @return bool
     */
    public function has($key)
    {
        return ! is_null($this->get($key));
    }// determine[check] the item has exists in the cache.

    /**
     * Retrieve an item from the cache by key. Retrieve an item from the cache by key.
     *
     * @param  string  $key
     * @param  mixed   $default
     * @return mixed
     */
    public function get($key, $default = null)// get item by key.
    {
        if (is_array($key)) {
            return $this->many($key);
        }// the key is a array ,will back a item array by many.

        $value = $this->store->get($this->itemKey($key));// get item[value] by key

        if (is_null($value)) {// null the value
            $this->fireCacheEvent(‘missed‘, [$key]);//missed

            $value = value($default);
        } else {
            $this->fireCacheEvent(‘hit‘, [$key, $value]);// hit
        }

        return $value;
    }

    /**
     * Retrieve multiple items from the cache by key.// Retrieve multiple items from the cache
     *
     * Items not found in the cache will have a null value.// items not found in the cache will have a null value
     *
     * @param  array  $keys
     * @return array
     */
    public function many(array $keys)
    {
        $normalizedKeys = [];

        foreach ($keys as $key => $value) {
            $normalizedKeys[] = is_string($key) ? $key : $value;
        }

        $values = $this->store->many($normalizedKeys);

        foreach ($values as $key => &$value) {
            if (is_null($value)) {
                $this->fireCacheEvent(‘missed‘, [$key]);

                $value = isset($keys[$key]) ? value($keys[$key]) : null;
            } else {
                $this->fireCacheEvent(‘hit‘, [$key, $value]);
            }
        }

        return $values;
    }

   // 2016-04-05
    /**
     * Retrieve an item from the cache and delete it.
     *
     * @param  string  $key
     * @param  mixed   $default
     * @return mixed
     */
    public function pull($key, $default = null)// Retrieve an item from the cache and delete it.
    {// like pop push , pull
        $value = $this->get($key, $default);// first we will get value by key

        $this->forget($key);// then forget the key, the same to delete the item by key

        return $value;// return the key
    }

    /**
     * Store an item in the cache.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  \DateTime|int  $minutes
     * @return void
     */
    public function put($key, $value, $minutes = null)// Store an item in the cache.
    {
        if (is_array($key) && filter_var($value, FILTER_VALIDATE_INT) !== false) {
            return $this->putMany($key, $value);
        }// if is a array and  check the filter var has int, the return putMany

        $minutes = $this->getMinutes($minutes);// change minutes to you  wants

        if (! is_null($minutes)) {// check has times [minutes]
            $this->store->put($this->itemKey($key), $value, $minutes);// put key

            $this->fireCacheEvent(‘write‘, [$key, $value, $minutes]);// fire cache event
        }
    }// to set a item in cache use a key

    /**
     * Store multiple items in the cache for a given number of minutes.
     *
     * @param  array  $values
     * @param  int  $minutes
     * @return void
     */
    public function putMany(array $values, $minutes)// Store multiple item in the cache for a
    {// given number of minutes
        $minutes = $this->getMinutes($minutes);// get a normal time

        if (! is_null($minutes)) {// has time
            $this->store->putMany($values, $minutes);// use a api to set way

            foreach ($values as $key => $value) {
                $this->fireCacheEvent(‘write‘, [$key, $value, $minutes]);
            }// a long a way to check the write event
        }
    }

    /**
     * Store an item in the cache if the key does not exist.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  \DateTime|int  $minutes
     * @return bool
     */
    public function add($key, $value, $minutes)// Store an item in the cache if the key does not exist.
    {// add values by key in to the cache
        $minutes = $this->getMinutes($minutes);// get a minutes

        if (is_null($minutes)) {
            return false;
        }// no time no value

        if (method_exists($this->store, ‘add‘)) {
            return $this->store->add($this->itemKey($key), $value, $minutes);
        }// check has the add method, or done null

        if (is_null($this->get($key))) {// no value
            $this->put($key, $value, $minutes);// put a key and value

            return true;
        }

        return false;
    }

    /**
     * Store an item in the cache indefinitely.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @return void
     */
    public function forever($key, $value)// Store an item in the cache indefinitely
    {
        $this->store->forever($this->itemKey($key), $value);// use api to set the key forever

        $this->fireCacheEvent(‘write‘, [$key, $value, 0]);// send a event to
    }

    /**
     * Get an item from the cache, or store the default value.
     *
     * @param  string  $key
     * @param  \DateTime|int  $minutes
     * @param  \Closure  $callback
     * @return mixed
     */
   // Get an item from the cache ,or store the default value.
    public function remember($key, $minutes, Closure $callback)
    {
        // If the item exists in the cache we will just return this immediately
        // otherwise we will execute the given Closure and cache the result
        // of that execution for the given number of minutes in storage.
        if (! is_null($value = $this->get($key))) {
            return $value;
        }// has the item then back it

        $this->put($key, $value = $callback(), $minutes);// set the

        return $value;
    }// a number to be remember

    /**
     * Get an item from the cache, or store the default value forever.
     *
     * @param  string   $key
     * @param  \Closure  $callback
     * @return mixed
     */
    public function sear($key, Closure $callback)
    {
        return $this->rememberForever($key, $callback);
    }// Get an item from the cache, or store the default value forever
   // like a 38 women, has the key ,i  use it,or i will set a default value,like kill it,
   // even a forever

    /**
     * Get an item from the cache, or store the default value forever.
     * Get an item from the cache, or store the
     * @param  string   $key
     * @param  \Closure  $callback
     * @return mixed
     */
   // a method like sear ,means to remember Forever
    public function rememberForever($key, Closure $callback)
    {
        // If the item exists in the cache we will just return this immediately
        // otherwise we will execute the given Closure and cache the result
        // of that execution for the given number of minutes. It‘s easy.
        if (! is_null($value = $this->get($key))) {
            return $value;
        }

        $this->forever($key, $value = $callback());

        return $value;
    }// if the item exists in the cache we will just return this immediately
   // otherwise we will execute the given Closure and cache the result of that execution for
   // the given of minutes ,it is easy

    /**
     * Remove an item from the cache.
     *
     * @param  string $key
     * @return bool
     */
    public function forget($key)// delete or remove or forget an item from the cache
    {
        $success = $this->store->forget($this->itemKey($key));// a api to forget

        $this->fireCacheEvent(‘delete‘, [$key]);// fire event  deltet

        return $success;// get result, more time it is success!
    }

    /**
     * Begin executing a new tags operation if the store supports it.
     *
     * @param  array|mixed  $names
     * @return \Illuminate\Cache\TaggedCache
     *
     * @throws \BadMethodCallException
     */
    public function tags($names)// Begin executing a new tags operation if the store supports it.
    {
        if (method_exists($this->store, ‘tags‘)) {// check has the method tags
            $taggedCache = $this->store->tags($names);// change the name to

            if (! is_null($this->events)) {
                $taggedCache->setEventDispatcher($this->events);
            }

            $taggedCache->setDefaultCacheTime($this->default);

            return $taggedCache;// set Default Cache then
        }

        throw new BadMethodCallException(‘This cache store does not support tagging.‘);
    }

    /**
     * Format the key for a cache item.
     *
     * @param  string  $key
     * @return string
     */
    protected function itemKey($key)
    {
        return $key;
    }// Format the key for a cache item. but do nothing

    /**
     * Get the default cache time.
     *
     * @return int
     */
    public function getDefaultCacheTime()
    {
        return $this->default;// a default about time
    }// Get the default cache time.

    /**
     * Set the default cache time in minutes.
     *
     * @param  int   $minutes
     * @return void
     */
    public function setDefaultCacheTime($minutes)
    {
        $this->default = $minutes;
    }// Set the default cache time in minutes.

    /**
     * Get the cache store implementation.
     *
     * @return \Illuminate\Contracts\Cache\Store
     */
    public function getStore()
    {
        return $this->store;// back an instance
    }// get the cache store implementation.

    /**
     * Determine if a cached value exists.
     *
     * @param  string  $key
     * @return bool
     */
    public function offsetExists($key)
    {
        return $this->has($key);// check has a key
    }// Determine if a cached value exists

    /**
     * Retrieve an item from the cache by key.
     *
     * @param  string  $key
     * @return mixed
     */
    public function offsetGet($key)
    {
        return $this->get($key);
    }// Retrieve an item from the cache by key.

    /**
     * Store an item in the cache for the default time.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @return void
     */
    public function offsetSet($key, $value)
    {
        $this->put($key, $value, $this->default);
    }// Store an item in the

    /**
     * Remove an item from the cache.
     *
     * @param  string  $key
     * @return void
     */
    public function offsetUnset($key)
    {
        $this->forget($key);
    }// a remove an item from the cache. method

    /**
     * Calculate the number of minutes with the given duration.
     *
     * @param  \DateTime|int  $duration
     * @return int|null
     */
    protected function getMinutes($duration)
    {
        if ($duration instanceof DateTime) {
            $fromNow = Carbon::now()->diffInMinutes(Carbon::instance($duration), false);

            return $fromNow > 0 ? $fromNow : null;
        }

        return is_string($duration) ? (int) $duration : $duration;
    }// Calculate the number of minutes with the given duration.
   // get time duration  for a int times

    /**
     * Handle dynamic calls into macros or pass missing methods to the store.
     * Handle dynamic calls into macros or pass missing methods to the store.
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
   // dynamic calls into macros or pass missing methods
    public function __call($method, $parameters)
    {
        if (static::hasMacro($method)) {
            return $this->macroCall($method, $parameters);
        }// static:: method to check has a method

        return call_user_func_array([$this->store, $method], $parameters);
    }// call_user_func_array()

    /**
     * Clone cache repository instance.
     *
     * @return void
     */
    public function __clone()
    {
        $this->store = clone $this->store;
    }// Clone cache repository instance.
}
时间: 2024-10-14 05:12:52

每天laravel-20160701|Repository的相关文章

laravel Repository 模式 优化代码

laravel(商)城代码优化   Repository 模式 优点:使Controller层更加解耦和易读 第1步 配置composer.json  "infyomlabs/laravel-generator": "dev-master",        "laravelcollective/html": "5.4.*",        "infyomlabs/core-templates": "

Laravel之控制器

一.简介 将所有的请求处理逻辑都放在单个routes.php 中肯定是不合理的,你也许还希望使用控制器类组织管理这些行为.控制器可以将相关的 HTTP 请求封装到一个类中进行处理.通常控制器存放在app/Http/Controllers 目录中. 二.基本控制器 1.简单示例下面是一个基本控制器类的例子.所有的 Laravel 控制器应该继承自 Laravel 自带的控制器基类Controller <?php namespace App\Http\Controllers; use App\Use

Laravel 5.2 INSTALL- node&#39;s npm and ruby&#39;s bundler.

https://getcomposer.org/doc/00-intro.md Introduction# Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Dependency management# Compose

为什么Laravel是最成功的PHP框架?

Laravel 是一个有着美好前景的年轻框架,它的社区充满着活力,相关的文档和教程完整而清晰,并为快速.安全地开发现代应用程序提供了必要的功能.在近几年对PHP 框架流行度的统计中,Laravel始终遥遥领先.那么是什么让Laravel成为最成功的PHP框架? 2011 年,Taylor Otwell将Laravel作为一种包含全新现代方法的框架介绍给大家.Laravel最初的设计是为了面向MVC架构的,它可以满足如事件处理.用户 身份验证等各种需求.另外它还有一个由管理数据库强力支持,用于管理

laravel小抄

原文地址:http://cheats.jesse-obrien.ca/ Artisan // Displays help for a given command php artisan --help OR -h // Do not output any message php artisan --quiet OR -q // Display this application version php artisan --version OR -V // Do not ask any interac

Laravel框架怎样使用阿里云ACE缓存服务

Laravel框架怎样使用阿里云ACE缓存服务 之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章.介绍了怎样通过扩展 Laravel 4 来支持须要 SASL 认证的阿里云 OCS 缓存服务.有网友问我.ACE 的缓存怎么在 Laravel 4 中使用.我本来认为应该能够全然用同样的办法,后来自己尝试的时候才发现,ACE 的缓存区别很大.所以再写一篇,介绍一下怎样在 Laravel 框架中使用阿里云 ACE 的缓存服务. 怎样扩展 Laravel 的缓存驱动 在 Lar

[php]laravel框架容器管理的一些要点

本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. 1. laravel容器基本认识 laravel框架是有一个容器框架,框架应用程序的实例就是一个超大的容器,这个实例在bootstrap/app.php内进行初始化: 这个文件在每一次请求到达laravel框架都会执行,所创建的$app即是laravel框架的应用程序实例,它在整个请求生命周期都是唯

Laravel 进阶任务笔记

在任务开始,我们会扩展一下新建的数据库表移植文件.刚建立的移植文件只有两列,手动添加如下: public function up() { Schema::create('tasks', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->index(); $table->string('name'); $table->timestamps(); }); } 再次

Laravel框架如何使用阿里云ACE缓存服务

Laravel框架如何使用阿里云ACE缓存服务 之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章,介绍了如何通过扩展 Laravel 4 来支持需要 SASL 认证的阿里云 OCS 缓存服务.有网友问我,ACE 的缓存怎么在 Laravel 4 中使用.我本来觉得应该可以完全用相同的办法,后来自己尝试的时候才发现,ACE 的缓存差别非常大.所以再写一篇,介绍一下如何在 Laravel 框架中使用阿里云 ACE 的缓存服务. 如何扩展 Laravel 的缓存驱动 在 La

laravel框架容器管理的一些要点(转)

本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. 1. laravel容器基本认识 laravel框架是有一个容器框架,框架应用程序的实例就是一个超大的容器,这个实例在bootstrap/app.php内进行初始化: 这个文件在每一次请求到达laravel框架都会执行,所创建的$app即是laravel框架的应用程序实例,它在整个请求生命周期都是唯