dominikweber81 / php-tmdb-symfony
Symfony 插件用于 TMDB (电影数据库) API。为访问 php-tmdb/api 库提供便捷。
Requires
- php: ^7.4 || ^8.0
- php-tmdb/api: ^4.0
- symfony/config: ^5.4 || ^6.0 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.0 || ^7.0
- symfony/event-dispatcher: ^5.4 || ^6.0 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.0 || ^7.0
- symfony/yaml: ^5.4 || ^6.0 || ^7.0
- twig/twig: ^3.0
Requires (Dev)
- nyholm/psr7: ^1.2
- php-http/cache-plugin: ^1.7
- php-http/guzzle7-adapter: ^0.1
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^7.5 || ^8.0 || ^9.3
- slevomat/coding-standard: ^6.4.1
- squizlabs/php_codesniffer: ^3.5.8
- symfony/framework-bundle: ^5.4 || ^6.0 || ^7.0
- symfony/phpunit-bridge: ^5.4 || ^6.0 || ^7.0
- vimeo/psalm: ^4.0
README
兼容 Symfony 5 和 6,PHP 7.4 及以上版本。
请买我一杯咖啡,或者一杯啤酒 :-)
我的胃会感激你的捐赠的!
安装
- 安装 Composer
- 安装 php-tmdb/api 依赖
- 在 Symfony 中开发时,我们建议使用 Symfony 的 PSR-18 HTTP 客户端
Symfony\Component\HttpClient\Psr18Client
,因为当非缓存结果通过你的分析器时,你的分析器将会被数据填满。
- 在 Symfony 中开发时,我们建议使用 Symfony 的 PSR-18 HTTP 客户端
然后引入插件
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.client
或 tmdb.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。