编程知识 cdmana.com

Projet d'ingénierie laraver IV: utilisation de la façade

Section précédente

Texte

Qu'est - ce queFacade

FacadeSelon la traduction, c'est la façade,Vous avez peut - être entendu parler d'un modèle de design appeléFacadeMode,Oui, c'est ça..En général, les fournisseurs de services passent parFacadeLes détails de mise en œuvre sont cachés au client,Méthode requise pour exposer le client,Le client n'a pas besoin d'une construction interne relationnelle,Appelez la méthode requise et.

Regardez le Code.,PourCacheL'utilisation de,InApi/IndexController.phpMoyenne

public function cacheGet() {
    return $this->apiSuccess([
        'yname' => Cache::get('yname')
    ]);
}

public function cacheSet() {
    if (Cache::add('yname', 'jack')) {
        return $this->apiSuccess();
    }
    return $this->apiFail('cache set fail.');

}
Copier le Code

image.png

image.png

Ici, nous passons directement src/Illuminate/Support/Facades/Cache.php C'est exact.CacheExécution des opérations, Sans se soucier CacheLogique de mise en œuvre, Où est - il stocké? 、 Comment conserver ,C'estFacadeCaractéristiques、Fonction.

FacadeComment cela a - t - il été réalisé?

OuCache Par exemple, ,Je vois.Facades/Cache.phpJuste quelques lignes de code, Il expose certaines méthodes à utiliser par les clients :

/** * @method static \Illuminate\Cache\TaggedCache tags(array|mixed $names) * @method static \Illuminate\Contracts\Cache\Lock lock(string $name, int $seconds = 0, mixed $owner = null) * @method static \Illuminate\Contracts\Cache\Lock restoreLock(string $name, string $owner) * @method static \Illuminate\Contracts\Cache\Repository store(string|null $name = null) * @method static \Illuminate\Contracts\Cache\Store getStore() * @method static bool add(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) * @method static bool flush() * @method static bool forever(string $key, $value) * @method static bool forget(string $key) * @method static bool has(string $key) * @method static bool missing(string $key) * @method static bool put(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) * @method static int|bool decrement(string $key, $value = 1) * @method static int|bool increment(string $key, $value = 1) * @method static mixed get(string $key, mixed $default = null) * @method static mixed pull(string $key, mixed $default = null) * @method static mixed remember(string $key, \DateTimeInterface|\DateInterval|int $ttl, \Closure $callback) * @method static mixed rememberForever(string $key, \Closure $callback) * @method static mixed sear(string $key, \Closure $callback) * * @see \Illuminate\Cache\CacheManager * @see \Illuminate\Cache\Repository */
class Cache extends Facade {
    /** * Get the registered name of the component. * * @return string */
    protected static function getFacadeAccessor() {
        return 'cache';
    }
}
Copier le Code

Viens voir.Facade Plusieurs méthodes dans la classe des parents peuvent comprendre son principe d'implémentation :


/** * Handle dynamic, static calls to the object. * * @param string $method * @param array $args * @return mixed * * @throws \RuntimeException */
public static function __callStatic($method, $args) {
    $instance = static::getFacadeRoot();

    if (! $instance) {
        throw new RuntimeException('A facade root has not been set.');
    }

    return $instance->$method(...$args);
}


/** * Get the root object behind the facade. * * @return mixed */
public static function getFacadeRoot() {
    return static::resolveFacadeInstance(static::getFacadeAccessor());
}

/** * Resolve the facade root instance from the container. * * @param object|string $name * @return mixed */
protected static function resolveFacadeInstance($name) {
    if (is_object($name)) {
        return $name;
    }

    if (isset(static::$resolvedInstance[$name])) {
        return static::$resolvedInstance[$name];
    }

    if (static::$app) {
        return static::$resolvedInstance[$name] = static::$app[$name];
    }
}

Copier le Code

Ha Ha!, C'est - à - dire que nous opérons Cache::getHeure,En fait, c'est un appelappDanscache L'Instance fonctionne .

appDanscache Comment est - ce arrivé? , C'est ce que nous avons mentionné dans la section précédente. CacheServiceProviderC'est, Nous avons vusrc/Illuminate/Cache/CacheServiceProvider.phpLa logique de:

/** * Register the service provider. * * @return void */
public function register() {
    $this->app->singleton('cache', function ($app) {
        return new CacheManager($app);
    });

    $this->app->singleton('cache.store', function ($app) {
        return $app['cache']->driver();
    });

    $this->app->singleton('cache.psr6', function ($app) {
        return new Psr16Adapter($app['cache.store']);
    });

    $this->app->singleton('memcached.connector', function () {
        return new MemcachedConnector;
    });

    $this->app->singleton(RateLimiter::class, function ($app) {
        return new RateLimiter($app->make('cache')->driver(
            $app['config']->get('cache.limiter')
        ));
    });
}
Copier le Code

Vous avez peut - être compris. , cache Ici avec CacheManagerFaire la liaison.

En résumé Cache::get Est - ce que l'opération finale CacheManage De get Méthodes,SpécifiqueCacheMangerDétails de la mise en oeuvre de: Comment initialiser 、 On n'en parle plus ici. , Laissez un message pour discuter d'O. .

FacadeInLaravel Il y a beaucoup d'utilisation à l'intérieur de ,Mais parce queFacade Les classes sont des enveloppes de plusieurs classes arrière , Donc nous essayons de ne pas ajouter Facade, Vous pouvez étendre les fonctions dont vous avez besoin par l'intermédiaire de l'interface .Etartisan Non disponible dans Facade Créer un modèle pour , Voici comment utiliser l'intérieur FacadeC'est bon.

Recommandation de fin de document

版权声明
本文为[Bcoding]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210914164725491A.html

Scroll to Top