{"id":64,"date":"2014-08-31T08:56:47","date_gmt":"2014-08-31T13:56:47","guid":{"rendered":"http:\/\/razonartificial.com\/themes\/openmind\/wordpress\/?p=64"},"modified":"2021-12-06T12:21:09","modified_gmt":"2021-12-06T17:21:09","slug":"usando-liipimaginebundle-sin-complicaciones-symfony","status":"publish","type":"post","link":"https:\/\/www.apdi.co\/blog\/usando-liipimaginebundle-sin-complicaciones-symfony\/","title":{"rendered":"Usando LiipImagineBundle Sin Complicaciones. Symfony"},"content":{"rendered":"<p>Algunos desarrolladores Symfony necesitan implementar de manera r\u00e1pida y elegante soluciones para el tratamiento de im\u00e1genes <!--more-->en sus proyectos, en situaciones relativamente simples como:<\/p>\n<ul>\n<li>Redimensionamiento de im\u00e1genes.<\/li>\n<li>Imagen de perfil en una webapp.<\/li>\n<li>Thumbnails.<\/li>\n<\/ul>\n<p>Entre otras espec\u00edficas, por eso, este post es para todos ellos. Para nuestra soluci\u00f3n, necesitaremos utilizar un bundle que aplica una configuraci\u00f3n e implementaci\u00f3n muy sencilla y amena, me refiero a LiipImagineBundle que puede ser descargado de su repositorio <a href=\"https:\/\/github.com\/liip\/LiipImagineBundle\">aqu\u00ed<\/a>.<\/p>\n<p>La documentaci\u00f3n es bastante clara, pero para los que no interpretan muy bien el ingl\u00e9s o simplemente les da flojera, solo deben realizar una serie de pasos muy sencillos como ya lo hab\u00eda dicho anteriormente.<\/p>\n<p><strong>1. Descargar e instalar LiipImagineBundle.<\/strong><\/p>\n<p>Como todos los bundles de symfony (utilizando composer), ejecutamos el comando:<\/p>\n<div id=\"ig-sh-1\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">code<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"code\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">php composer.phar require &quot;liip\/imagine-bundle:dev-master&quot;<\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Si tienes instalado composer de forma global en tu sistema, seguramente te interesar\u00e1 utilizar el comando m\u00e1s corto:<\/p>\n<div id=\"ig-sh-2\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">code<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"code\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">composer require &quot;liip\/imagine-bundle:dev-master&quot;<\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>A prop\u00f3sito, si tu sistema operativo es linux puede que tu composer se encuentre en la ruta:<\/p>\n<div id=\"ig-sh-3\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">code<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"code\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">\/usr\/local\/bin\/composer<\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Para m\u00e1s informaci\u00f3n sobre composer, puedes visitar su website <a href=\"https:\/\/getcomposer.org\/\">getcomposer.org<\/a>.<\/p>\n<p>Finalmente, una vez que composer hace todo el trabajo, deber\u00e1s habilitar el bundle en en AppKernel.php de tu proyecto as\u00ed:<\/p>\n<div id=\"ig-sh-4\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">php<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"php\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #666666;font-style: italic\">\/\/ app\/AppKernel.php<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #000000;font-weight: bold\">public<\/span> <span style=\"color: #000000;font-weight: bold\">function<\/span> registerBundles<span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span> <span style=\"color: #009900\">&#123;<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">&nbsp; <span style=\"color: #000088\">$bundles<\/span> <span style=\"color: #339933\">=<\/span> <span style=\"color: #990000\">array<\/span><span style=\"color: #009900\">&#040;<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">&nbsp; &nbsp; <span style=\"color: #666666;font-style: italic\">\/\/ ...<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">&nbsp; &nbsp; <span style=\"color: #000000;font-weight: bold\">new<\/span> Liip\\ImagineBundle\\LiipImagineBundle<span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span><span style=\"color: #339933\">,<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">&nbsp; <span style=\"color: #009900\">&#041;<\/span><span style=\"color: #339933\">;<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #009900\">&#125;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Y listo.<\/p>\n<p><strong>\u00a02. Configuraci\u00f3n del bundle en tu proyecto.<\/strong><\/p>\n<p>Para la configuraci\u00f3n del bundle posiblemente s\u00f3lo necesites configurar de la siguiente manera:<\/p>\n<div id=\"ig-sh-5\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">yaml<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"yaml\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: blue\"># app\/config.yml<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">liip_imagine<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; resolvers<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; profile<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; web_path<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; web_root<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span style=\"font-weight: bold;color: red\">%kernel.root_dir%\/..\/web\/<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; cache_prefix<\/span><span style=\"font-weight: bold;color: brown\">: <\/span>\/profile\/pictures<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp;loaders<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp;profile_loader<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; &nbsp;filesystem<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data_root<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span style=\"font-weight: bold;color: red\">%kernel.root_dir%\/..\/uploads\/profile_pictures\/<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp;cache<\/span><span style=\"font-weight: bold;color: brown\">: <\/span>profile<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp;filter_sets<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; &nbsp;profile_24x24<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data_loader<\/span><span style=\"font-weight: bold;color: brown\">: <\/span>profile_loader<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;quality<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span>80<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filters<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;thumbnail<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span class=\"br0\">&#123;<\/span> size<span style=\"font-weight: bold;color: brown\">: <\/span><span class=\"br0\">&#091;<\/span><span>24<\/span>, <span>24<\/span><span class=\"br0\">&#093;<\/span>, mode<span style=\"font-weight: bold;color: brown\">: <\/span>outbound <span class=\"br0\">&#125;<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; &nbsp;profile_100x100<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data_loader<\/span><span style=\"font-weight: bold;color: brown\">: <\/span>profile_loader<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;quality<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span>80<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filters<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;thumbnail<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span class=\"br0\">&#123;<\/span> size<span style=\"font-weight: bold;color: brown\">: <\/span><span class=\"br0\">&#091;<\/span><span>100<\/span>, <span>100<\/span><span class=\"br0\">&#093;<\/span>, mode<span style=\"font-weight: bold;color: brown\">: <\/span>outbound <span class=\"br0\">&#125;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Teniendo en cuenta la configuraci\u00f3n anterior, vamos por partes:<\/p>\n<ul>\n<ul>\n<li>Los atributos y valores que dicen <b><i>profile<\/i><\/b> y <b><i>profile_loader<\/i><\/b> (puede ser el nombre que quieran), deben estar en las mismas ubicaciones que el c\u00f3digo anterior.<\/li>\n<li><b><i>profile_24x24<\/i><\/b> y <b><i>profile_100x100<\/i><\/b> son los nombres de las configuraciones de las im\u00e1genes, pueden definirse las que sean necesarias y al mismo tiempo son los nombres de los directorios que contendr\u00e1n las im\u00e1genes en cach\u00e9 con determinada resoluci\u00f3n.<\/li>\n<li><b><i>web_root<\/i><\/b> es el path al directorio donde se crearan las im\u00e1genes \u201ccacheadas\u201d en las dimensiones que uno configura y estar\u00e1n en el subdirectorio definido en el par\u00e1metro <b><i>cache_prefix<\/i><\/b>. La estructura de directorios de <b><i>cache_prefix<\/i><\/b> es creada por el bundle la primera vez que se requiere la imagen, luego queda disponible para pr\u00f3ximas peticiones.<\/li>\n<li><b><i>data_root<\/i><\/b> es donde se define el path en el que se encuentran las im\u00e1genes originales, es decir, sin ning\u00fan tratamiento (por lo general son im\u00e1genes pesadas y con alta resoluci\u00f3n).<\/li>\n<li>Dentro de <b><i>filter_sets <\/i><\/b>se definen las configuraciones de las im\u00e1genes y ya son un poco m\u00e1s claras para entender, <b><i>data_loader <\/i><\/b>de donde carga las imagenes, <b><i>quality<\/i><\/b> calidad de la imagen, <b><i>filter<\/i><\/b> que establece las dimensiones y <b><i>mode<\/i><\/b> el modo redimensionar la imagen.<\/li>\n<li>Para ver toda la configuraci\u00f3n por defecto del bundle <a href=\"https:\/\/github.com\/liip\/LiipImagineBundle\/blob\/master\/Resources\/doc\/configuration.md\">aqu\u00ed<\/a><\/li>\n<\/ul>\n<\/ul>\n<p>Para terminar con la configuracios, agregamos en nuestro archivo de routing.yml<\/p>\n<div id=\"ig-sh-6\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">yaml<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"yaml\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: blue\"># app\/config\/routing.yml<\/span><\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: #007F45\">_liip_imagine<\/span>:<\/div><\/li>\n<li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\"><span style=\"color: green\">&nbsp; resource<\/span><span style=\"font-weight: bold;color: brown\">: <\/span><span style=\"color: #CF00CF\">&quot;@LiipImagineBundle\/Resources\/config\/routing.xml&quot;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p><strong>3. Implementaci\u00f3n en el Twig.<\/strong><\/p>\n<p>Creo que la mejor implementaci\u00f3n de im\u00e1genes tratadas se deber\u00eda dar en las vistas de la webapp, pero tambi\u00e9n es posible aplicar desde el controlador, por ahora solo vamos al twig deseado y escribimos.<\/p>\n<p><em>&lt;img src=\u00bb<b>{{<\/b>&#8216;image.jpg&#8217;<b>|<\/b><b>imagine_filter<\/b><b>(<\/b>&#8216;profile<b>_<\/b>100&#215;100\u00bb<b>)<\/b><b>}}<\/b>\u00bb \/&gt;<\/em><\/p>\n<p>Utilizamos el filtro <b><i>imagine_filter <\/i><\/b>pasandole 2 argumentos, el primero es la ruta de la imagen, el segundo es el nombre del filtro definido en la configuraci\u00f3n, en nuestro caso puede ir <i>profile_100x100<\/i> o <i>profile_24x24 <\/i>segun cual se quiera mostrar.<\/p>\n<p>Con estos 3 pasos podemos trabajar con im\u00e1genes de manera f\u00e1cil y r\u00e1pida, personalmente me parece un bundle estupendo y muy \u00fatil.<\/p>\n<p>Espero que les sea de utilidad a la comunidad de Symfony, quedo atento a sus comentarios y sugerencias.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Algunos desarrolladores Symfony necesitan implementar de manera r\u00e1pida y elegante soluciones para el tratamiento de im\u00e1genes<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[],"class_list":["post-64","post","type-post","status-publish","format-standard","hentry","category-php","category-symfony"],"_links":{"self":[{"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/posts\/64","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/comments?post=64"}],"version-history":[{"count":2,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/posts\/64\/revisions"}],"predecessor-version":[{"id":833,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/posts\/64\/revisions\/833"}],"wp:attachment":[{"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/media?parent=64"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/categories?post=64"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.apdi.co\/blog\/wp-json\/wp\/v2\/tags?post=64"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}