Skip to content

Facades

Facade 元件為常用的 Hyperf 服務提供靜態代理。

安裝

shell
composer require friendsofhyperf/facade

基礎包依賴 friendsofhyperf/supporthyperf/contexthyperf/di。大多數 Facade 還需要可選依賴,請僅安裝應用實際使用的 Facade 所需的包,例如:

shell
composer require hyperf/config hyperf/logger

支援的 Facade

Facade容器訪問器額外依賴
AMQPHyperf\Amqp\Producerhyperf/amqp
App, DIPsr\Container\ContainerInterface已包含(hyperf/di
AsyncQueueHyperf\AsyncQueue\Driver\DriverFactoryhyperf/async-queue
CachePsr\SimpleCache\CacheInterfacehyperf/cache
ConfigHyperf\Contract\ConfigInterfacehyperf/config
CookieHyperf\HttpMessage\Cookie\CookieJarInterfacehyperf/framework
CryptFriendsOfHyperf\Encryption\Encrypterfriendsofhyperf/encryption
EventPsr\EventDispatcher\EventDispatcherInterfacehyperf/framework
File, FilesystemLeague\Flysystem\Filesystemhyperf/filesystem
KafkaHyperf\Kafka\ProducerManagerhyperf/kafka
LogHyperf\Logger\LoggerFactoryhyperf/logger
PipelineFriendsOfHyperf\Support\Pipeline\Hub已包含(friendsofhyperf/support
RedisHyperf\Redis\Redishyperf/redis
RequestHyperf\HttpServer\Contract\RequestInterfacehyperf/framework
ResponseHyperf\HttpServer\Contract\ResponseInterfacehyperf/framework
SessionHyperf\Contract\SessionInterfacehyperf/session
TranslatorHyperf\Contract\TranslatorInterfacehyperf/translation
ValidatorHyperf\Validation\Contract\ValidatorFactoryInterfacehyperf/validation
ViewHyperf\View\RenderInterfacehyperf/view

AppDI 的別名,FileFilesystem 的別名。

配置與解析

Hyperf 會自動發現此元件,但它的 ConfigProvider 不釋出或合併任何配置。請按各 Hyperf 元件的正常方式配置底層服務。

除下方列出的元件特有方法外,對 Facade 的靜態呼叫會轉發給 ApplicationContext 根據上表訪問器解析出的物件。Facade 基類會快取首次解析的 物件。如果容器中不存在對應訪問器,將丟擲 Hyperf\Di\Exception\NotFoundException

需要底層物件本身時,可以呼叫 getFacadeRoot()

php
use FriendsOfHyperf\Facade\Config;

$config = Config::getFacadeRoot();
$name = Config::get('app_name', 'hyperf');

每個代理可接受的方法是其底層訪問器的公開方法。具體簽名請參考相應元件文件。

元件特有方法

以下公開方法由 Facade 類自身實現:

Facade方法行為
AMQPdispatch(ProducerMessageInterface $producerMessage): PendingAmqpProducerMessageDispatch建立 AMQP 待排程物件的例項方法。
AsyncQueuedispatch(Closure|JobInterface $job): PendingAsyncQueueDispatch建立非同步佇列待排程物件的例項方法。
AsyncQueuepush(JobInterface $job, int $delay = 0, ?string $pool = null)使用指定佇列池推送;當 $poolnull 時使用 $job->getPoolName();文件返回型別為 bool
Cookiehas($key)檢查當前請求中的 Cookie,而不是 CookieJar;文件引數型別為 string,返回型別為 bool
Cookieget($key, $default = null)讀取當前請求中的 Cookie;文件鍵型別為 string,返回型別為 mixed
Kafkadispatch(ProduceMessage $produceMessage): PendingKafkaProducerMessageDispatch建立 Kafka 待排程物件的例項方法。
Kafkasend(ProduceMessage $produceMessage, ?string $pool = null): void以單元素批次傳送訊息;未指定佇列池時使用 default
KafkasendBatch($produceMessages, ?string $pool = null): void傳送文件型別為 ProduceMessage[] 的訊息批次;未指定佇列池時使用 default
Logchannel(string $name = 'hyperf', string $channel = 'default')LoggerFactory 獲取 LoggerInterface;其他 Log 靜態呼叫使用這兩個預設值。

AMQP::dispatchAsyncQueue::dispatchKafka::dispatch 被宣告為例項方法。 它們不是靜態 Facade 代理方法。

php
use FriendsOfHyperf\Facade\AsyncQueue;
use FriendsOfHyperf\Facade\Cookie;
use FriendsOfHyperf\Facade\Kafka;
use FriendsOfHyperf\Facade\Log;

AsyncQueue::push($job, delay: 5, pool: 'default');

Kafka::send($message);
Kafka::sendBatch([$firstMessage, $secondMessage], 'default');

$token = Cookie::get('token');
$hasToken = Cookie::has('token');

Log::channel('hyperf', 'default')->info('Using an explicit logger channel');
Log::info('Uses the hyperf/default logger');