wtfzdotnet/wtfz-tmdb-bundle

Symfony Bundle for TMDB (电影数据库) API。提供对php-tmdb/api库的简单访问。

安装: 216

依赖者: 0

建议者: 0

安全: 0

星标: 35

关注者: 7

分支: 27

开放问题: 1

类型:symfony-bundle

5.0.3 2023-03-19 20:48 UTC

README

License License Build Status Build Status codecov PHP Total Downloads

兼容Symfony 5和6,PHP 7.4及以上。

请给我买杯咖啡,或者一杯啤酒 :-)

我的胃会感激您的捐赠!

安装

  • 安装Composer
  • 安装php-tmdb/api依赖项
    • 在Symfony中开发时,我们建议使用Symfony的PSR-18 HTTP客户端Symfony\Component\HttpClient\Psr18Client,因为当非缓存结果通过您的分析器时,您的分析器将充满数据。

然后需要此包

composer require php-tmdb/symfony:^4

配置

app/bundles.php中注册此包

<?php

return [
    // --- snip ---
    Tmdb\SymfonyBundle\TmdbSymfonyBundle::class => ['all' => true],
];

将以下内容添加到您的app/config/config.yml中,或者用您选择的服务(PSR-18 Http Client / PSR-17 Factories)替换值

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    options:
        http:
            client: Symfony\Component\HttpClient\Psr18Client
            request_factory: Nyholm\Psr7\Factory\Psr17Factory
            response_factory: Nyholm\Psr7\Factory\Psr17Factory
            stream_factory: Nyholm\Psr7\Factory\Psr17Factory
            uri_factory: Nyholm\Psr7\Factory\Psr17Factory

services.yaml:

services:
    Symfony\Component\HttpClient\Psr18Client:
        class: Symfony\Component\HttpClient\Psr18Client

    Nyholm\Psr7\Factory\Psr17Factory:
        class: Nyholm\Psr7\Factory\Psr17Factory

配置缓存

您可以使用任何您希望的PSR-6缓存,我们将简单地使用symfony的缓存。

在使用缓存时,请确保在composer中包含php-http/cache-plugin,此插件为我们处理逻辑,因此我们不必重新发明轮子。

但是,您也可以选择实现自己的缓存监听器,或者将缓存逻辑添加到您选择的http客户端中。

composer require php-http/cache-plugin:^1.7

首先,在symfony中配置缓存池config/cache.yaml

framework:
    cache:
        pools:
            cache.tmdb:
                adapter: cache.adapter.filesystem
                default_lifetime: 86400

然后在您的tmdb_symfony.yaml配置中启用缓存并引用此缓存池

tmdb_symfony:
  api_key: YOUR_API_KEY_HERE
  cache:
    enabled: true
    adapter: cache.tmdb

想要使用日志记录吗?

4.0版本开始,日志记录功能允许您进行细粒度配置。

您可以使用任何您希望的PSR-3日志记录器,我们将简单地使用monolog。

首先配置monolog并添加一个通道和处理程序

monolog:
    channels:
        - tmdb
    handlers:
        tmdb:
            type: stream
            path: "%kernel.logs_dir%/php-tmdb--symfony.%kernel.environment%.log"
            level: info
            channels: ["tmdb"]

然后在您的tmdb_symfony.yaml配置中

tmdb_symfony:
  api_key: YOUR_API_KEY_HERE
  log:
    enabled: true
    adapter: monolog.logger.tmdb
    hydration:
      enabled: true
      with_hydration_data: false # We would only recommend to enable this with an in-memory logger, so you have access to the hydration data within the profiler.
      adapter: null # you can set different adapters for different logs, leave null to use the main adapter.
      listener: Tmdb\Event\Listener\Logger\LogHydrationListener
      formatter: Tmdb\Formatter\Hydration\SimpleHydrationFormatter
    request_logging:
      enabled: true
      adapter: null # you can set different adapters for different logs, leave null to use the main adapter.
      listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
      formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter
    response_logging:
      enabled: true
      adapter: null # you can set different adapters for different logs, leave null to use the main adapter.
      listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
      formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter
    api_exception_logging:
      enabled: true
      adapter: null # you can set different adapters for different logs, leave null to use the main adapter.
      listener: Tmdb\Event\Listener\Logger\LogApiErrorListener
      formatter: Tmdb\Formatter\TmdbApiException\SimpleTmdbApiExceptionFormatter
    client_exception_logging:
      enabled: true
      adapter: null # you can set different adapters for different logs, leave null to use the main adapter.
      listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
      formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter

禁用存储库

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    repositories:
        enabled: false

禁用twig扩展

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    twig_extension:
        enabled: false

禁用https

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    options:
        secure:
            enabled: false

禁用旧别名

设置为true以删除所有旧别名(例如,tmdb.clienttmdb.movie_repository)。

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    disable_legacy_aliases: true

完整的默认配置

tmdb_symfony:
    api_key: YOUR_API_KEY_HERE
    cache:
        enabled: true
        adapter: cache.tmdb
    log:
        enabled: true
        adapter: monolog.logger.tmdb
        hydration:
            enabled: true
            with_hydration_data: false
            adapter: null
            listener: Tmdb\Event\Listener\Logger\LogHydrationListener
            formatter: Tmdb\Formatter\Hydration\SimpleHydrationFormatter
        request_logging:
            enabled: true
            adapter: null
            listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
            formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter
        response_logging:
            enabled: true
            adapter: null
            listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
            formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter
        api_exception_logging:
            enabled: true
            adapter: null
            listener: Tmdb\Event\Listener\Logger\LogApiErrorListener
            formatter: Tmdb\Formatter\TmdbApiException\SimpleTmdbApiExceptionFormatter
        client_exception_logging:
            enabled: true
            adapter: null
            listener: Tmdb\Event\Listener\Logger\LogHttpMessageListener
            formatter: Tmdb\Formatter\HttpMessage\SimpleHttpMessageFormatter
    options:
        bearer_token: YOUR_BEARER_TOKEN_HERE
        http:
            client: Symfony\Component\HttpClient\Psr18Client
            request_factory: Nyholm\Psr7\Factory\Psr17Factory
            response_factory: Nyholm\Psr7\Factory\Psr17Factory
            stream_factory: Nyholm\Psr7\Factory\Psr17Factory
            uri_factory: Nyholm\Psr7\Factory\Psr17Factory
        secure: true
        host: api.themoviedb.org/3
        guest_session_token: null
        event_dispatcher:
            adapter: event_dispatcher
        hydration:
            event_listener_handles_hydration: false
            only_for_specified_models: {  }
        api_token: YOUR_API_KEY_HERE # you don't have to set this if you set it at the root level
    session_token: null
    repositories:
        enabled: true
    twig_extension:
        enabled: true
    disable_legacy_aliases: false

用法

获取客户端

<?php

namespace App;

use Tmdb\Client;

class MovieParser
{
    private Client $client;

    // Have Symfony auto-wire the client via your constructor
    public function __construct(Client $client)
    {
        $this->client = $client;
    }
}

获取存储库

<?php

namespace App;

use Tmdb\Model\AbstractModel;
use Tmdb\Repository\MovieRepository;

class MovieParser
{
    private MovieRepository $movieRepository;

    // Have Symfony auto-wire the repository via your constructor
    public function __construct(MovieRepository $movieRepository)
    {
        $this->movieRepository = $movieRepository;
    }

    public function findMovie(string $id): AbstractModel
    {
        // Use the auto-wired repository in any of your methods
        return $this->movieRepository->load($id);
    }
}

所有存储库的概述可以在服务配置repositories.xml中找到。

还有一个Twig辅助程序,它使用Tmdb\Helper\ImageHelper来输出url和html。

{{ movie.backdropImage|tmdb_image_url }}

{{ movie.backdropImage|tmdb_image_html('original', null, 50)|raw }}

有关所有其他交互,请参阅php-tmdb/api