php-tmdb/symfony

SymfonyBundle for TMDB (电影数据库) API。提供对php-tmdb/api库的便捷访问。

安装次数: 46,880

依赖项: 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中找到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