php-tmdb / symfony
SymfonyBundle for TMDB (电影数据库) API。提供对php-tmdb/api库的便捷访问。
Requires
- php: ^7.4 || ^8.0
- php-tmdb/api: ^4.0
- symfony/config: ^5.4 || ^6.0
- symfony/dependency-injection: ^5.4 || ^6.0
- symfony/event-dispatcher: ^5.4 || ^6.0
- symfony/http-kernel: ^5.4 || ^6.0
- symfony/yaml: ^5.4 || ^6.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
- symfony/phpunit-bridge: ^5.4 || ^6.0
- vimeo/psalm: ^4.0
This package is auto-updated.
Last update: 2024-09-20 00:28:08 UTC
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 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.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
中找到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。