dominikweber81/php-tmdb-symfony

Symfony 插件用于 TMDB (电影数据库) API。为访问 php-tmdb/api 库提供便捷。

安装: 1

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 27

类型:symfony-bundle

7.0.0 2024-07-10 10:11 UTC

This package is auto-updated.

Last update: 2024-09-10 10:31:37 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 客户端/PSR-17 工厂)替换值

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