pontedilana / open-graph-bundle
一个Symfony OpenGraph包
Requires
- php: 7.4.* || 8.1.* || 8.2.*
- euskadi31/opengraph: ^1.0 || ^2.0
- symfony/config: ^5.4 || ^6.2
- symfony/dependency-injection: ^5.4 || ^6.2
- symfony/framework-bundle: ^5.4 || ^6.2
- symfony/http-kernel: ^5.4 || ^6.2
- symfony/twig-bundle: ^5.4 || ^6.2
- twig/twig: ^3.5
Requires (Dev)
- matthiasnoback/symfony-config-test: ^4.3
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- symfony/phpunit-bridge: ^5.4 || ^6.2
This package is auto-updated.
Last update: 2024-09-19 10:47:02 UTC
README
OpenGraphBundle
PontedilanaOpenGraphBundle 通过使用 euskadi31/opengraph 库,提供了一个简单的方式来改善你在 Symfony 应用程序中管理 OpenGraph 的方式。
此存储库是 tenolo/open-graph-bundle 的分支,由 Pontedilana 维护;已添加对 PHP 8、Symfony 5 和 6 的支持。
注意:OpenGraph 是许多网站(Facebook、Twitter、Google、...)使用的一种标准协议,用于获取有关您内容的更精确信息。
这个包的目的是将您的应用程序的每个实体与一个 OpenGraph 地图 相关联,这是一个能够为您的实体创建 OpenGraph 文档的服务。
它也可以与任何其他类型的数据一起工作。
安装
安装非常快速
1. 使用 Composer 下载
通过运行以下命令将包添加到您的 composer.json
文件中:
composer require pontedilana/open-graph-bundle
2. 在您的内核中启用它
在您的 app/AppKernel.php
文件中启用该包;
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Pontedilana\OpenGraphBundle\PontedilanaOpenGraphBundle(), ); }
使用方法
PontedilanaOpenGraphBundle 将将...
- 实体 与...
- ...或与您的应用程序的 其他数据如数组 相关联...
- OpenGrap 地图,这些实体的 OpenGraph 方式定义
让我们用一个例子来更好地理解:一个博客帖子。
您的实体
对于一个博客帖子,您可能有一个这样的实体:
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Table() * @ORM\Entity */ class BlogPost { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $title; /** * @ORM\Column(type="text") */ private $content; }
它的 OpenGraph 地图
与您的实体关联的地图将是一个实现 Pontedilana\OpenGraphBundle\Map\OpenGraphMapInterface
的类,以及该接口的两个必需方法:map(DocumentWriterInterface $document, $data)
和 supports($data)
。
例如,我们的地图可能如下所示
<?php namespace App\OpenGraph; use App\Entity\BlogPost; use Pontedilana\OpenGraphBundle\OpenGraph\DocumentWriterInterface; use Pontedilana\OpenGraphBundle\Map\OpenGraphMapInterface; use Opengraph\Opengraph; class BlogPostMap implements OpenGraphMapInterface { /** * @var BlogPost $data */ public function map(DocumentWriterInterface $document, $data) { $document->append(OpenGraph::OG_SITE_NAME, 'MyBlog'); $document->append(OpenGraph::OG_TYPE, OpenGraph::TYPE_ARTICLE); $document->append(OpenGraph::OG_TITLE, $data->getTitle()); } public function supports($data) { return $entity instanceof BlogPost; } }
supports
方法声明了此地图能够处理哪种类型的实体。 map
方法创建一个表示给定实体的 OpenGraph 文档。
创建后,我们还需要将我们的类注册到 OpenGraph 管理器中。为此,我们将使用 pontedilana_open_graph.map
标签
services: App\OpenGraph\: resource: '../src/OpenGraph' tags: [ 'pontedilana_open_graph.map' ]
使用地图
我们的地图已注册,因此我们可以在任何需要渲染它的地方使用它。例如,使用 Twig
<html> <head> <title>Blog post</title> {{ opengraph_render(blogPost) }} <!-- blogPost should be an instance of BlogPost --> </head> <body> ... </body> </html>
注意:如果没有地图能够处理在
opengraph_render
中提供的实体,将抛出一个NotSupported
异常。
另一条注意事项:致谢和灵感来自 tgalopin