CINXE.COM
API Platform 3 Part 1: Mythically Good RESTful APIs Video Tutorial Screencast | SymfonyCasts
<!DOCTYPE html> <html lang="en" class="scroll-smooth"> <head prefix="og: http://ogp.me/ns#"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Need to build an API and love the process? You've come to the right place. Built on top of Symfony, API Platform enables you to build a rich, JSON-LD-powered, hypermedia API... pretty much instantly (we'll even teach you what those buzzwords mean)"> <link rel="canonical" href="https://symfonycasts.com/screencast/api-platform"> <meta property="og:title" content="API Platform 3 Part 1: Mythically Good RESTful APIs Video Tutorial Screencast"> <meta property="og:description" content="Need to build an API and love the process? You've come to the right place. Built on top of Symfony, API Platform enables you to build a rich, JSON-LD-powered, hypermedia API... pretty much instantly (we'll even teach you what those buzzwords mean)"> <meta property="og:url" content="https://symfonycasts.com/screencast/api-platform"> <meta property="og:image" content="https://symfonycasts.com/static/media/cache/course_video_poster_large/uploads/screencast/api-platform/api-platform-535.png"> <meta name="twitter:card" content="summary"> <title>API Platform 3 Part 1: Mythically Good RESTful APIs Video Tutorial Screencast | SymfonyCasts</title> <link rel="stylesheet" href="https://symfonycasts.com/build/150.42a35cc8.css" data-turbo-track="reload"><link rel="stylesheet" href="https://symfonycasts.com/build/tailwind.d798e5a4.css" data-turbo-track="reload"> <link rel="preconnect" href="https://kit.fontawesome.com"> <link rel="preconnect" href="https://api.fontshare.com"> <link rel="stylesheet" href="https://kit.fontawesome.com/f44096511e.css" crossorigin="anonymous"> <script async defer src="https://sa.symfonycasts.com/latest.js"></script> <script src="https://symfonycasts.com/build/runtime.f090d72d.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/8764.79cb6dbe.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/560.7017a8cd.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4987.fd46174f.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4184.24dfa7a0.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/2624.eedc0a93.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/969.cbfbbb6b.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4430.b8f58b3a.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/4079.d25f5551.js" defer data-turbo-track="reload"></script><script src="https://symfonycasts.com/build/tailwind.1044c30e.js" defer data-turbo-track="reload"></script> </head> <body class="min-h-screen bg-white text-black-8 dark:text-white dark:bg-black-9" data-user-id="" data-is-dark-mode-on="false" > <header data-controller="mobile-menu" class="border-b border-black-2 dark:border-black-8 dark:bg-black-9"> <section class="max-w-screen-2xl mx-auto py-3 px-5 flex justify-between items-center"> <div class="flex grow"> <button data-action="mobile-menu#toggle:prevent" class="md:hidden cursor-pointer relative w-4 h-6 mt-2.5 mr-3"> <div class="bg-black-9 dark:bg-white w-4 h-0.5 rounded absolute top-4 -mt-0.5 transition-all duration-500 before:content-[''] before:bg-black-9 before:dark:bg-white before:w-4 before:h-0.5 before:rounded before:absolute before:transition-all before:duration-500 before:-translate-x-2 before:translate-y-2 after:content-[''] after:bg-black-9 after:dark:bg-white after:w-4 after:h-0.5 after:rounded after:absolute after:transition-all after:duration-500 after:-translate-x-2 after:-translate-y-2"></div> </button> <a href="/" class="text-3xl font-medium"> <div class="bg-[url('../images/symfonycasts-logo-dm.svg')] w-[52px] h-[45px] bg-cover bg-no-repeat min-[1099px]:bg-[url('../images/symfonycasts-logo.svg')] min-[1099px]:dark:bg-[url('../images/symfonycasts-logo-dm.svg')] min-[1099px]:w-[240px] min-[1099px]:bg-contain mr-5" alt="SymfonyCasts Logo"></div> </a> <span class="hidden md:flex md:grow items-center"> <form action="/screencast/api-platform/search" data-controller="rich-search" role="search" aria-expanded="false" class="group w-[228px] aria-expanded:w-full transition-all relative" > <div class="relative"> <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"> <svg aria-hidden="true" class="w-5 h-5 text-black-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg> </div> <input data-rich-search-target="input" autocomplete="off" data-action="keydown.meta+k@window->rich-search#openByKey keydown.ctrl+k@window->rich-search#openByKey focus->rich-search#open keydown->rich-search#hotkeys rich-search#syncInput" value="" name="q" type="text" class="w-full focus:ring-0 focus:ring-offset-0 focus:outline-none group-aria-expanded:border group-aria-expanded:rounded-b-none group-aria-expanded:border-b-0 group-aria-expanded:border-blue-6 bg-black-1 border dark:border-black-7 border-black-2 text-black-5 text-sm rounded-lg block pl-10 p-2 dark:bg-black-7 dark:placeholder-black-5 dark:text-white" placeholder="Search Tutorials" spellcheck="false" aria-label="search" > </div> <div data-rich-search-target="list" class="absolute w-full bg-black-1 dark:bg-black-7 rounded-b-lg z-30 group-aria-expanded:block hidden border border-t-0 border-blue-6" > <ul> <li data-rich-search-target="listItem" data-action="mouseover->rich-search#moveWithMouse click->rich-search#selectAndSubmit" class="group aria-selected:bg-blue-6 aria-selected:text-white cursor-pointer" aria-selected="true" data-search-action="/screencast/api-platform/search" > <div class="flex justify-between items-center p-3"> <i class="fa fa-search"></i> <span data-rich-search-target="textItem" class="pl-3 grow text-ellipsis overflow-hidden whitespace-nowrap"></span> <span class="text-black-9 dark:text-white rounded p-1 bg-black-2 dark:bg-black-8 font-normal text-sm min-w-[92px]">In this course</span> </div> </li> <li data-rich-search-target="listItem" data-action="mouseover->rich-search#moveWithMouse click->rich-search#selectAndSubmit" class="group aria-selected:bg-blue-6 aria-selected:text-white cursor-pointer rounded-b-lg" aria-selected="false" data-search-action="/search" > <div class="flex justify-between items-center p-3"> <i class="fa fa-search"></i> <span data-rich-search-target="textItem" class="grow pl-3 text-ellipsis overflow-hidden whitespace-nowrap"></span> <span class="text-black-9 dark:text-white rounded p-1 bg-black-2 dark:bg-black-8 font-normal text-sm min-w-[121px]">All SymfonyCasts</span> </div> </li> </ul> </div> </form> </span> </div> <div class="font-semibold"> <nav class="space-x-1.5 sm:space-x-2 min-[812px]:space-x-3 xl:space-x-5" aria-label="main"> <div class="inline-block md:hidden" data-controller="dropdown" data-dropdown-offset-value="40" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="false" data-dropdown-use-overlay-value="true" > <button data-action="dropdown#toggle:prevent" type="button" class="py-1 px-2.5"> <span class="sr-only">Open Search Menu</span> <i class="fas fa-search fa-fw"></i> </button> <div class="absolute z-50 hidden w-auto bg-white rounded-lg shadow dark:bg-black-8 py-5 px-7 after:absolute after:content-[''] after:top-0 after:-translate-y-6 after:left-0 after:right-0 after:mx-auto after:border-[12px] after:w-4 after:border-b-white after:dark:border-b-black-8 after:border-transparent" data-dropdown-target="block" > <form action="/search" data-controller="rich-search" role="search" aria-expanded="false" class="group w-[228px] aria-expanded:w-full transition-all relative" > <div class="relative"> <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"> <svg aria-hidden="true" class="w-5 h-5 text-black-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg> </div> <input data-rich-search-target="input" autocomplete="off" data-action="" value="" name="q" type="text" class="w-full focus:ring-0 focus:ring-offset-0 focus:outline-none group-aria-expanded:border group-aria-expanded:border-blue-6 bg-black-1 border dark:border-black-7 border-black-2 text-black-5 text-sm rounded-lg block pl-10 p-2 dark:bg-black-7 dark:placeholder-black-5 dark:text-white" placeholder="Search Tutorials" spellcheck="false" aria-label="search" > </div> </form> <h4 class="pt-4 pb-3 text-sm text-black-4 font-normal">Popular Search Topics</h4> <ul class="list-none font-semibold text-lg gap-3"> <li> <a href="/search?q=API%20Platform"> API Platform </a> </li> <li> <a href="/search?q=Doctrine"> Doctrine </a> </li> <li> <a href="/search?q=Turbo"> Turbo </a> </li> <li> <a href="/search?q=EasyAdmin"> EasyAdmin </a> </li> </ul> </div> </div> <div class="hidden md:inline-block" data-controller="dropdown" data-dropdown-offset-value="20" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="true" data-dropdown-use-overlay-value="false" > <a href="/courses" class="hover:text-blue-6">Tutorials</a> <button data-action="dropdown#toggle:prevent" type="button" class=""> <i class="fa-regular fa-ellipsis pl-1 hover:text-blue-6"></i> </button> <div class="z-50 absolute hidden w-auto bg-white divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600 py-5 px-7" data-dropdown-target="block" > <a href="/courses" class="hover:text-blue-6"><span class="text-lg font-semibold underline">View all Courses</span> <span class="font-sm font-normal">(123)</span></a> <div class="grid grid-cols-2"> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #06E7FC"></i>Symfony 7</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony6"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #6B02F7"></i>Symfony 6</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony5"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #A6F124"></i>Symfony 5</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/rest"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #7BE89B"></i>APIs</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/js-tools"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #ED268F"></i>JavaScript Frameworks & Tools</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/javascript"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #ED268F"></i>JavaScript Fundamentals</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/testing"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #E7E517"></i>Testing</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/drupal"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #AF04F6"></i>Drupal 8</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/oo"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #3502ED"></i>OOP</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/php"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #07DBDE"></i>PHP</a> </div> <div class="py-[6px] px-[6px] font-normal"> <a class="hover:text-blue-6" href="/tracks/extras"><i class="fa-solid fa-circle-small pr-3 text-[10px]" style="color: #E645CD"></i>Dev Tools</a> </div> </div> </div> </div> <a href="/gift-card/" class="hover:text-blue-6 hidden lg:inline">Gift Card</a> <a class="hover:text-blue-6 hidden lg:inline" href="/pricing">Pricing</a> <span class="hidden lg:inline border-r border-black-3 dark:border-black-6"></span> <div class="inline-block" data-controller="dropdown" data-dropdown-offset-value="40" data-dropdown-placement-value="bottom" data-dropdown-close-on-click-inside-value="true" data-dropdown-use-overlay-value="false" > <button data-action="dropdown#toggle:prevent" type="button" class="test-notifications-bell rounded-full py-1 px-2.5 hover:bg-black-1 hover:dark:bg-black-7 active:dark:bg-blue-8 active:dark:text-blue-5 active:bg-blue-1 active:text-blue-6"> <i class="fa fa-bell fa-fw relative"> <div class="bg-red-500 border-2 border-white dark:border-black-8 rounded-full h-[10px] w-[10px] absolute right-[-2px] top-[-2px]"></div> </i> </button> <div class="z-50 absolute h-[580px] overflow-y-scroll hidden md:2w-[530px] bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600 py-5 px-7 after:absolute after:content-[''] after:top-0 after:-translate-y-6 after:right-5 after:border-[12px] after:w-4 after:border-b-white after:dark:border-b-gray-700 after:border-transparent" data-dropdown-target="block" > <div class="flex justify-between"> <span class="text-lg font-semibold pb-4">Notifications</span> </div> <div class="flex pt-7"> <turbo-frame id="user-notifications-page1" src="/updates" loading="lazy" target="_top"> Loading more entries <i class="fa fa-spinner fa-spin"></i> </turbo-frame> </div> </div> </div> <a href="#" class="nav-link py-1 px-2.5 hover:text-blue-6" data-controller="dark-mode-toggle" data-dark-mode-toggle-url-value="/api/set-dark-mode" data-dark-mode-toggle-class-name-value="dark" data-action="dark-mode-toggle#toggle:prevent" ><i class="fa fa-adjust fa-fw"></i></a> <span class="whitespace-nowrap"> <a class="btn-secondary-sm mr-2 whitespace-nowrap hidden md:inline-block" href="/login">Log In</a> <a class="btn-blue-sm whitespace-nowrap inline-block" href="/signup">Sign Up</a> </span> </nav> </div> </section> <section data-mobile-menu-target="menu" class="absolute top-68 z-40 border-b border-black-2 dark:border-black-7 bg-white dark:bg-black-8 w-full text-2xl flex-col origin-top animate-open-menu hidden"> <nav class="flex flex-col justify-between min-h-screen py-8" aria-label="mobile"> <div class="flex flex-col gap-2.5 p-0"> <div data-controller="toggle" data-toggle-button-toggle-classes-value="fa-angle-down fa-angle-up" data-toggle-hidden-classes-value="h-0 py-0" data-toggle-shown-classes-value="py-5" data-toggle-transition-height-value="true" > <div class="flex justify-between px-5"> <a href="/courses" class="hover:text-blue-6"> Tutorials </a> <button data-action="toggle#toggle:prevent"> <i class="fa-regular fa-angle-down pl-2 hover:text-blue-6"></i> </button> </div> <div class="bg-black-1 dark:bg-black-7 px-5 py-5 hidden overflow-hidden transition-all duration-500" data-toggle-target="content"> <span class="text-xs font-medium">Tracks (11)</span> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 7</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony6"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 6</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/symfony5"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Symfony 5</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/rest"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>APIs</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/js-tools"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>JavaScript Frameworks & Tools</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/javascript"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>JavaScript Fundamentals</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/testing"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Testing</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/drupal"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Drupal 8</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/oo"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>OOP</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/php"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>PHP</a> </div> <div class="py-[6px] px-[6px] text-base font-normal"> <a class="hover:text-blue-6" href="/tracks/extras"><i class="fa-solid fa-circle-small pr-3 text-[10px]"></i>Dev Tools</a> </div> <a href="/courses" class="hover:text-blue-6"><span class="text-lg font-semibold underline">View all Courses</span> <span class="text-xs font-normal">(123)</span></a> </div> </div> <a href="/gift-card/" class="hover:text-blue-6 px-5"> Gift Card </a> <a class="hover:text-blue-6 px-5" href="/pricing">Pricing</a> </div> <div class="flex flex-col px-3"> <a class="btn-secondary-sm text-center" href="/login">Log In</a> <a class="btn-blue-sm text-center mt-2.5" href="/signup">Sign Up</a> </div> </nav> </section> </header> <main class="mx-auto"> <div id="course-wrapper" class="relative md:static md:grid transition-all duration-500 md:grid-cols-[375px_minmax(0,1fr)]" data-controller="toggle chapters-sidebar-mobile chapters-list" data-toggle-shown-classes-value="md:grid-cols-[375px_minmax(0,1fr)]" data-toggle-hidden-classes-value="md:grid-cols-[74px_minmax(0,1fr)] chapter-list-hidden" data-toggle-start-hidden-value="false" data-toggle-fully-hidden-class-value="" data-toggle-cookie-name-value="isChapterListHidden" data-toggle-target="content" data-chapters-list-full-rendered-url-value="/screencast/149/_chaptersList/progress?isChapterListHidden=0" > <div class="md:hidden z-30 fixed bottom-10 left-1/3" > <button class="btn-primary-sm hidden" data-action="chapters-sidebar-mobile#close" data-chapters-sidebar-mobile-target="closeButton" >Close Chapter List <i class="fa-solid fa-layer-group"></i></button> <button class="btn-primary-sm" data-action="chapters-sidebar-mobile#open" data-chapters-sidebar-mobile-target="openButton" >View Chapter List <i class="fa-solid fa-layer-group"></i></button> </div> <div data-simplebar id="chapter-list-149" data-turbo-permanent="true" data-chapters-sidebar-mobile-target="content" class="!absolute z-20 w-full md:!sticky hidden md:block -mb-10 top-0 md:h-screen overflow-y-scroll border-r border-black-3 dark:border-black-6 shadow-md md:shadow-none" style="scrollbar-width:none;" > <div class="bg-white dark:bg-black-9 flex-shrink-0" > <!-- start course chapter list --> <div class="pt-4"> <!-- Table of contents --> <turbo-frame id="chapters-list-149" target="_top" data-chapters-list-target="sidebar" > <div class="px-5"> <div class="flex pb-3 md:justify-between" data-toggle-target="addHidingClass" data-hiding-class="md:justify-end" data-showing-class="md:justify-between" > <p class="text-xl font-semibold block md:sidebar-collapsed:hidden">Chapters</p> <button class="js-chapter-arrow hidden md:block" > <i class="fa-solid fa-arrow-left-to-line transition-all duration-500 " data-toggle-target="addHidingClass" data-hiding-class="md:rotate-180" ></i> </button> </div> <div class="text-xs flex gap-2 md:sidebar-collapsed:hidden pb-5 whitespace-nowrap"> <span class="uppercase"><i class="fa-solid fa-layer-group pr-2"></i>28 Chapters</span> <span>|</span> <span><i class="fa fa-clock pr-2"></i> 2:51:42</span> <span>|</span> </div> </div> <ul class="border-t border-black-3 dark:border-black-6 pt-5 js-chapter-list"> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/install" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">01</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Installing API Platform</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:29</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/api-resource" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">02</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Creating your First ApiResource</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:44</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/swagger" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">03</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Swagger UI: Interactive Docs</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">6:41</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/open-api-spec" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">04</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">The Powerful OpenAPI Spec</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:24</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/json-ld" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">05</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">JSON-LD: Giving Meaning to your Data</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:21</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/hydra" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">06</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Hydra: Describing API Classes, Operations & More</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">4:06</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/profiler" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">07</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">API Debugging with the Profiler</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:12</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/operations" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">08</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Operations / Endpoints</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">6:38</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/serializer" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">09</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">The Serializer</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">9:08</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/serialization-groups" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">10</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Serialization Groups: Choosing Fields</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:28</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/serialization-tricks" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">11</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Serialization Tricks</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:15</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/pagination" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">12</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Pagination & Foundry Fixtures</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:44</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/filters" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">13</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Filters: Searching Results</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:14</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/property-filter" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">14</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">PropertyFilter: Sparse Fieldsets</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">6:55</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/formats" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">15</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">More Formats: HAL & CSV</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:10</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/validation" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">16</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Validation</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:29</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/user-entity" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">17</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Creating a User Entity</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">4:06</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/user-resource" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">18</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">User API Resource</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:51</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/relations" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">19</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Relating Resources</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:08</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/relations-iri" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">20</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Relations & Iris</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">3:40</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/embedded" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">21</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Embedded Relations</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:58</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/embedded-write" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">22</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Embedded Write</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">7:29</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/collections-write" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">23</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Adding Items to a Collection Property</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">4:04</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/collections-create" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">24</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Creating Embedded Objects</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">5:34</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/collections-remove-item" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">25</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Removing Items from a Collection</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">3:49</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/relation-filtering" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">26</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Filtering on Relations</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">3:51</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/subresources" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">27</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">Subresources</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">9:54</div> </div> </div> </div> </div> </li> <li class=" hover:bg-black-1 hover:dark:bg-black-8 px-4 md:px-0"> <div class="md:px-5 py-2.5" data-toggle-target="addHidingClass" data-hiding-class="md:px-2" data-showing-class="md:px-5" > <div class="relative"> <a href="/screencast/api-platform/react-admin" class=" block z-20 absolute w-full h-full js-chapter-link" ></a> <div> <div class="flex justify-between items-center"> <div class="border relative border-black-2 dark:border-black-5 rounded-2xl flex items-center justify-center w-14 h-[50px] flex-shrink-0"> <span class="text-sm z-10 font-medium">28</span> <div class="h-full absolute bg-black-2 dark:bg-black-7 rounded-l-2xl left-0" style="width: 0%;" ></div> </div> <div class="flex-grow pl-3 pr-2 md:sidebar-collapsed:hidden"> <div class="font-medium text-sm ">React Admin</div> </div> <div class="font-medium text-xs flex items-center md:sidebar-collapsed:hidden">9:20</div> </div> </div> </div> </div> </li> </ul> </turbo-frame> </div> <!-- closes actual list of chapters --> </div> </div> <div class="flex-grow overflow-hidden course-content"> <div class="bg-contain bg-no-repeat overflow-hidden bg-[url('../images/hero-gradient.png')] dark:bg-[url('../images/hero-gradient-dark.png')] min-w-0"> <div class="max-w-screen-xl mx-auto px-4"> <div class="pt-6"> </div> <div class="flex justify-between text-sm pt-3 sm:pt-9 mb-3"> <div class="flex justify-start gap-2"> <div class="bg-[url('../images/sf-lm.svg')] dark:bg-[url('../images/sf-dm.svg')] w-6 h-4 bg-contain bg-no-repeat mt-[3px]" alt="SymfonyCasts Logo"></div> <span>></span> <a href="/tracks/rest"> APIs </a> <span>></span> <p>Course Overview</p> </div> <div class="flex justify-end"> <div class="js-lang-switcher" data-controller="dropdown" data-dropdown-placement-value="bottom" data-dropdown-offset-value="10"> <button type="button" data-action="dropdown#toggle"> <span>English</span> <i class="fas fa-caret-down pl-1"></i> </button> <div class="absolute z-10 hidden w-auto bg-white rounded-lg shadow dark:bg-gray-700" data-dropdown-target="block"> <ul aria-labelledby="dropdownLanguageButton" class="py-2 text-sm text-gray-700 dark:text-gray-200"> <li> <a href="/screencast/api-platform" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" > English </a> </li> <li> <a href="/es/screencast/api-platform" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" > Español </a> </li> </ul> </div> </div> </div> </div> <section class="flex flex-col xl:flex-row xl:h-[294px] drop-shadow-md"> <div style="background-image: url(https://symfonycasts.com/static/media/cache/course_video_poster_large/uploads/screencast/api-platform/api-platform-535.png);" class="xl:order-2 relative rounded-t-3xl xl:rounded-r-3xl xl:rounded-tl-none bg-cover bg-center h-[210px] xl:h-full xl:w-[470px]"> <div class="absolute right-2 top-4"> <turbo-frame id="bookmark-controls-course-149"> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <button class="bg-white text-black-8 rounded-xl px-3 py-2" data-placement="bottom" > <i class="fal fa-bookmark"></i> </button> <span class="sr-only">Login to bookmark this course</span> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Login to bookmark this course</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </turbo-frame> </div> </div> <div class="xl:order-1 bg-white dark:bg-black-7 p-6 rounded-b-3xl xl:rounded-l-3xl xl:rounded-br-none flex-grow"> <h1 class="text-[32px] font-semibold leading-9">API Platform 3 Part 1: Mythically Good RESTful APIs</h1> <p class="pt-2">Gear up to build a fully-fledged application and not just APIs! Explore API platform, learn about Swagger, OpenAPI, IRI management & more!</p> <div class="mt-14"> <a href="/pricing/api-platform" class="btn-primary-sm"> Buy Access </a> </div> </div> </section> <div class="flex flex-col xl:flex-row mt-10 border-b border-black-3 dark:border-black-6 pb-10"> <div class="xl:w-[205px] xl:shrink-0"> <ul class="text-xs font-medium uppercase space-y-4 border-b border-black-3 dark:border-black-6 pb-5"> <li><i class="pr-2 fa-solid fa-circle-user"></i>4304 students</li> <li><i class="pr-2 fa-solid fa-closed-captioning"></i>EN/ES Captions</li> <li><i class="pr-2 fa-solid fa-language"></i>EN/ES Script</li> <li><i class="pr-2 fa-solid fa-award"></i>Certificate of Completion</li> </ul> <h3 class="text-sm pt-5 mb-3">Your Guides</h3> <div class="space-y-2"> <div> <a href="https://github.com/weaverryan" target="_blank"> <img class="rounded-xl h-10 w-10 inline mr-2" src="https://avatars.githubusercontent.com/u/121003?v=4&s=200" alt="Ryan Weaver"> <span class="font-semibold whitespace-nowrap">Ryan Weaver</span> </a> </div> </div> </div> <div class="xl:pl-10"> <h3 class="text-xl font-semibold mt-6 xl:mt-0">About this course</h3> <div data-controller="highlight-js"> <div class="inline" data-controller="course-deps"> <button class="my-2 btn-secondary-sm" data-action="course-deps#handleClick" >Symfony 6.2</button> <div data-controller="modal" data-action="turbo:before-cache@window->modal#close modal:open->modal#open modal:close->modal#close modal:close@window->modal#close" data-course-deps-target="dependenciesModal" data-modal-shown-value="false" data-modal-close-click-outside-value="true" > <dialog class="open:flex p-0 bg-white dark:bg-black-9 text-left transform rounded-lg shadow-xl inset-0 w-full md:w-fit md:max-w-[50%] md:min-w-[50%] animate-fade-in backdrop:bg-slate-600 backdrop:bg-opacity-80 backdrop:backdrop-blur-sm" data-modal-target="dialog" data-action="close->modal#close click->modal#clickOutside" > <div class="flex grow p-5"> <div class="grow overflow-auto justify-center items-center"> <div class="break-words text-center dark:text-white"> <h3 class="py-3 text-2xl text-center font-medium text-black-9 dark:text-white border-b border-black-3 dark:border-black-6"> What PHP libraries does this tutorial use? </h3> <div class="prose dark:prose-invert"> <pre><code class="language-json">// composer.json { "require": { "php": ">=8.1", "ext-ctype": "*", "ext-iconv": "*", "api-platform/core": "^3.0", // v3.0.8 "doctrine/annotations": "^1.0", // 1.14.2 "doctrine/doctrine-bundle": "^2.8", // 2.8.0 "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2 "doctrine/orm": "^2.14", // 2.14.0 "nelmio/cors-bundle": "^2.2", // 2.2.0 "nesbot/carbon": "^2.64", // 2.64.1 "phpdocumentor/reflection-docblock": "^5.3", // 5.3.0 "phpstan/phpdoc-parser": "^1.15", // 1.15.3 "symfony/asset": "6.2.*", // v6.2.0 "symfony/console": "6.2.*", // v6.2.3 "symfony/dotenv": "6.2.*", // v6.2.0 "symfony/expression-language": "6.2.*", // v6.2.2 "symfony/flex": "^2", // v2.2.4 "symfony/framework-bundle": "6.2.*", // v6.2.3 "symfony/property-access": "6.2.*", // v6.2.3 "symfony/property-info": "6.2.*", // v6.2.3 "symfony/runtime": "6.2.*", // v6.2.0 "symfony/security-bundle": "6.2.*", // v6.2.3 "symfony/serializer": "6.2.*", // v6.2.3 "symfony/twig-bundle": "6.2.*", // v6.2.3 "symfony/ux-react": "^2.6", // v2.6.1 "symfony/validator": "6.2.*", // v6.2.3 "symfony/webpack-encore-bundle": "^1.16", // v1.16.0 "symfony/yaml": "6.2.*" // v6.2.2 }, "require-dev": { "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.2 "symfony/debug-bundle": "6.2.*", // v6.2.1 "symfony/maker-bundle": "^1.48", // v1.48.0 "symfony/monolog-bundle": "^3.0", // v3.8.0 "symfony/stopwatch": "6.2.*", // v6.2.0 "symfony/web-profiler-bundle": "6.2.*", // v6.2.4 "zenstruck/foundry": "^1.26" // v1.26.0 } }</code></pre> </div> </div> </div> <button class="absolute right-4 top-4 dark:text-white flex items-center opacity-70 transition-opacity hover:opacity-100" data-action="modal#close" type="button" > <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> </dialog> </div> </div> <div class="inline" data-controller="course-deps"> <button class="my-2 btn-secondary-sm" data-action="course-deps#handleClick" >API Platform 3.0</button> <div data-controller="modal" data-action="turbo:before-cache@window->modal#close modal:open->modal#open modal:close->modal#close modal:close@window->modal#close" data-course-deps-target="dependenciesModal" data-modal-shown-value="false" data-modal-close-click-outside-value="true" > <dialog class="open:flex p-0 bg-white dark:bg-black-9 text-left transform rounded-lg shadow-xl inset-0 w-full md:w-fit md:max-w-[50%] md:min-w-[50%] animate-fade-in backdrop:bg-slate-600 backdrop:bg-opacity-80 backdrop:backdrop-blur-sm" data-modal-target="dialog" data-action="close->modal#close click->modal#clickOutside" > <div class="flex grow p-5"> <div class="grow overflow-auto justify-center items-center"> <div class="break-words text-center dark:text-white"> <h3 class="py-3 text-2xl text-center font-medium text-black-9 dark:text-white border-b border-black-3 dark:border-black-6"> What PHP libraries does this tutorial use? </h3> <div class="prose dark:prose-invert"> <pre><code class="language-json">// composer.json { "require": { "php": ">=8.1", "ext-ctype": "*", "ext-iconv": "*", "api-platform/core": "^3.0", // v3.0.8 "doctrine/annotations": "^1.0", // 1.14.2 "doctrine/doctrine-bundle": "^2.8", // 2.8.0 "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2 "doctrine/orm": "^2.14", // 2.14.0 "nelmio/cors-bundle": "^2.2", // 2.2.0 "nesbot/carbon": "^2.64", // 2.64.1 "phpdocumentor/reflection-docblock": "^5.3", // 5.3.0 "phpstan/phpdoc-parser": "^1.15", // 1.15.3 "symfony/asset": "6.2.*", // v6.2.0 "symfony/console": "6.2.*", // v6.2.3 "symfony/dotenv": "6.2.*", // v6.2.0 "symfony/expression-language": "6.2.*", // v6.2.2 "symfony/flex": "^2", // v2.2.4 "symfony/framework-bundle": "6.2.*", // v6.2.3 "symfony/property-access": "6.2.*", // v6.2.3 "symfony/property-info": "6.2.*", // v6.2.3 "symfony/runtime": "6.2.*", // v6.2.0 "symfony/security-bundle": "6.2.*", // v6.2.3 "symfony/serializer": "6.2.*", // v6.2.3 "symfony/twig-bundle": "6.2.*", // v6.2.3 "symfony/ux-react": "^2.6", // v2.6.1 "symfony/validator": "6.2.*", // v6.2.3 "symfony/webpack-encore-bundle": "^1.16", // v1.16.0 "symfony/yaml": "6.2.*" // v6.2.2 }, "require-dev": { "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.2 "symfony/debug-bundle": "6.2.*", // v6.2.1 "symfony/maker-bundle": "^1.48", // v1.48.0 "symfony/monolog-bundle": "^3.0", // v3.8.0 "symfony/stopwatch": "6.2.*", // v6.2.0 "symfony/web-profiler-bundle": "6.2.*", // v6.2.4 "zenstruck/foundry": "^1.26" // v1.26.0 } }</code></pre> </div> </div> </div> <button class="absolute right-4 top-4 dark:text-white flex items-center opacity-70 transition-opacity hover:opacity-100" data-action="modal#close" type="button" > <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> </dialog> </div> </div> </div> <div class="break-words text-lg prose dark:prose-invert overview"><p>Need to build an API and love the process? You've come to the right place.</p> <p>Built on top of Symfony, API Platform enables you to build a rich, JSON-LD-powered, hypermedia API... pretty much instantly (we'll even teach you what those buzzwords mean). In this tutorial, we'll build a real app including:</p> <ul> <li>Setting up API Platform in a Symfony app</li> <li>Buzzwords: Swagger, OpenAPI & JSON-LD+Hydra</li> <li>"Exposing" a Class to your API via <code>ApiResource</code></li> <li>Customizing operations</li> <li>All about serialization and controlling input/output fields</li> <li>IRIs & how to control them</li> <li>Related resources</li> <li>Embedded resources & Subresources</li> <li>Filters</li> <li>Pagination</li> <li>Validation</li> <li>Formats & Content-Type Negotiation</li> <li>Bonus: React Admin</li> </ul> </div> </div> </div> <h2 class="text-[22px] mt-[56px] mb-4 font-semibold mb-4"> Next courses in the <a class="underline" href="/tracks/rest#api-platform-3">APIs: API Platform 3</a> section of the <a class="underline" href="/tracks/rest"> APIs </a> Track! </h2> <div class="grid grid-cols-1 min-[900px]:grid-cols-2 xl:grid-cols-3 mb-14"> <div class="mb-5 pb-1 mr-3"> <a href="/screencast/api-platform-security"> <div class=""> <img class="rounded-tr-[20px] rounded-tl-[20px]" src="https://symfonycasts.com/static/media/cache/course_tiles_outbound/uploads/screencast/api-platform-security/api-platform-security-953.png" alt="API Platform 3 Part 2: Security for your Treasures"> </div> <div class="p-5 rounded-br-[20px] rounded-bl-[20px] border-r border-l border-b border-black-2 dark:border-black-7"> <h6 class="h-[56px] mb-3 text-lg font-semibold line-clamp-2">API Platform 3 Part 2: Security for your Treasures</h6> <div class="text-[11px] flex uppercase gap-2"> <span><i class="fa-solid fa-layer-group pr-2"></i>37 Videos</span> <span>|</span> <span><i class="fa fa-clock pr-2"></i> 3:43:31</span> <span>|</span> <span><i class="fa-solid fa-flag-swallowtail pr-2"></i> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <span>0%</span> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> Your Progress <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <div class="progress-bar-container"> </div> </span> </div> </div> </a> </div> <div class="mb-5 pb-1 mr-3"> <a href="/screencast/api-platform-extending"> <div class=""> <img class="rounded-tr-[20px] rounded-tl-[20px]" src="https://symfonycasts.com/static/media/cache/course_tiles_outbound/uploads/screencast/api-platform-extending/api-platform-extending-765.png" alt="API Platform 3 Part 3: Custom Resources"> </div> <div class="p-5 rounded-br-[20px] rounded-bl-[20px] border-r border-l border-b border-black-2 dark:border-black-7"> <h6 class="h-[56px] mb-3 text-lg font-semibold line-clamp-2">API Platform 3 Part 3: Custom Resources</h6> <div class="text-[11px] flex uppercase gap-2"> <span><i class="fa-solid fa-layer-group pr-2"></i>36 Videos</span> <span>|</span> <span><i class="fa fa-clock pr-2"></i> 3:44:20</span> <span>|</span> <span><i class="fa-solid fa-flag-swallowtail pr-2"></i> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <span>0%</span> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> Your Progress <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <div class="progress-bar-container"> </div> </span> </div> </div> </a> </div> </div> <!-- Course Comments Section --> <a id="comments"></a> <div class="mt-6"> <div data-turbo="false" data-controller="user-nickname comment" data-comment-new-comment-form-url-value="/comment/course-149/form/new" data-comment-comments-total-value="29" data-comment-comments-translation-value="{"singular":"Comment","plural":"Comments"}" data-comment-comments-tf-id-value="comments-course-149" > <div class="flex justify-between pb-8"> <h3 class="text-xl font-semibold"> <span data-comment-target="commentsTotal">29</span> <span data-comment-target="commentsTotalTranslation">Comments</span> </h3> <div data-controller="dropdown" data-dropdown-placement-value="bottom-end"> <span class="text-xs border-r border-black-6 pr-3">Sort By</span> <button class="ml-3 text-sm" data-action="dropdown#toggle" data-comment-target="sortBtn"> <span class="sr-only">Open Sort By Menu</span> <span class="font-semibold">Most Useful</span> <i class="fas fa-caret-down"></i> </button> <ul data-dropdown-target="block" class="absolute text-sm z-10 hidden w-auto bg-white divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600 py-2"> <li><a class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" href="#best" data-action="comment#sort" data-target-url="/comment/course-149?sort=best">Most Useful</a></li> <li><a class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" href="#newest" data-action="comment#sort" data-target-url="/comment/course-149?sort=newest">Newest</a></li> <li><a class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" href="#oldest" data-action="comment#sort" data-target-url="/comment/course-149?sort=oldest">Oldest</a></li> </ul> </div> </div> <div class="js-form-container comment-form-level-0"> <div class="w-full text-center"> <div class="break-normal font-semibold border border-black-2 dark:border-black-9 p-5 mb-9 bg-white dark:bg-black-8 rounded-xl" style="box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.06), 0px 9px 20px 0px rgba(0, 0, 0, 0.06), 0px 37px 37px 0px rgba(0, 0, 0, 0.05), 0px 83px 50px 0px rgba(0, 0, 0, 0.03), 0px 147px 59px 0px rgba(0, 0, 0, 0.01), 0px 229px 64px 0px rgba(0, 0, 0, 0.00);"> <a href="/login" class="text-blue-6">Login</a> or <a href="/signup" class="text-blue-6">Register</a> to join the conversation </div> </div> </div> <div data-comment-target="comments" class="js-comments-container"> <turbo-frame src="/comment/course-149/list" id="comments-course-149"> <turbo-frame id="comments-course-149"> <div data-controller="comment-height"> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30019" data-disqus-comment-id=""> <a id="comment-30019"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </span> <span class="space-x-1"> <strong>Evgeny</strong> <a id="comment-30019" class="text-black-2" href="#comment-30019" title="July 22, 2023 21:25" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30019" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Great lessons, thanks! Is there a video on how to use GraphQl based on Api-Platform?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">1</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30019" data-action="comment#reply" data-form-url="/comment/30019/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30019" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30019"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30030" data-disqus-comment-id=""> <a id="comment-30030"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30019"><small><i class="fas fa-share"></i> Evgeny</small></a> <a id="comment-30030" class="text-black-2" href="#comment-30030" title="July 24, 2023 18:17" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30030" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at July 24, 2023 18:17"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey @Evgeny </p> <p>We do not cover QraphQL in these videos but ApiPlatform docs are very good, you may want to give it a read <a href="https://api-platform.com/docs/core/graphql/">https://api-platform.com/docs/core/graphql/</a></p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">1</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30030" data-action="comment#reply" data-form-url="/comment/30030/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30030" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30030"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30118" data-disqus-comment-id=""> <a id="comment-30118"></a> <div class="comment-level-2 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </span> <span class="space-x-1"> <strong>Evgeny</strong> <a href="#comment-30030"><small><i class="fas fa-share"></i> MolloKhan</small></a> <a id="comment-30118" class="text-black-2" href="#comment-30118" title="August 4, 2023 19:24" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30118" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>It's a pity, as always, not everything is clear from the documentation, for example, how can I return DTO instead an entity object. It would be great if you recorded additional videos on graphql.</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30118" data-action="comment#reply" data-form-url="/comment/30118/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30118" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30118"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30119" data-disqus-comment-id=""> <a id="comment-30119"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30118"><small><i class="fas fa-share"></i> Evgeny</small></a> <a id="comment-30119" class="text-black-2" href="#comment-30119" title="August 4, 2023 19:50" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30119" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Thanks for your feedback, I'll pass your message to the team. We love to know what our users want to learn. In the meantime, I can recommend you to watch these videos where we introduce a DTO into an ApiPlatform project, but it's written for version 2, however, the logic is still relevant but the code will change for version 3<br /><a href="https://symfonycasts.com/screencast/api-platform-extending/output-class">https://symfonycasts.com/screencast/api-platform-extending/output-class</a></p> <p>Oh, and here are the docs about DTOs <a href="https://api-platform.com/docs/core/dto/">https://api-platform.com/docs/core/dto/</a></p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30119" data-action="comment#reply" data-form-url="/comment/30119/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30119" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30119"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30120" data-disqus-comment-id=""> <a id="comment-30120"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30119"><small><i class="fas fa-share"></i> MolloKhan</small></a> <a id="comment-30120" class="text-black-2" href="#comment-30120" title="August 4, 2023 19:52" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30120" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Oh, and also, I'm literally coding up episode 3 right now - <a href="https://symfonycasts.com/screencast/api-platform3-extending">https://symfonycasts.com/screencast/api-platform3-extending</a> - where we go extensively into DTO's :)</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">1</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30120" data-action="comment#reply" data-form-url="/comment/30120/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30120" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30120"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30122" data-disqus-comment-id=""> <a id="comment-30122"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/1d72932efe5467ff2bd481a2e28c1204?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Evgeny avatar"> </span> <span class="space-x-1"> <strong>Evgeny</strong> <a href="#comment-30119"><small><i class="fas fa-share"></i> MolloKhan</small></a> <a id="comment-30122" class="text-black-2" href="#comment-30122" title="August 5, 2023 08:02" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30122" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Thanks for the answer! Will annotations with api-platform settings work for a graphql?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30122" data-action="comment#reply" data-form-url="/comment/30122/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30122" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30122"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30143" data-disqus-comment-id=""> <a id="comment-30143"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30122"><small><i class="fas fa-share"></i> Evgeny</small></a> <a id="comment-30143" class="text-black-2" href="#comment-30143" title="August 7, 2023 17:35" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30143" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>I'm not sure about that. As far as I know, ApiPlatform 3 moved from annotations to PHP attributes, which are faster and more reliable.</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30143" data-action="comment#reply" data-form-url="/comment/30143/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30143" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30143"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28742" data-disqus-comment-id=""> <a id="comment-28742"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/c38f60a2fffc1e3a1788299971a108ec?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Pawel_Liszka avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/c38f60a2fffc1e3a1788299971a108ec?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Pawel_Liszka avatar"> </span> <span class="space-x-1"> <strong>Pawel_Liszka</strong> <a id="comment-28742" class="text-black-2" href="#comment-28742" title="January 24, 2023 13:21" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28742" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Thank you very much, Ryan - the guide fell from heaven! A few days ago I was just watching the previous version of the guide to the API Platform but with symfony 6.2 it worked quite averagely! I'm waiting for the next episodes! :)</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">1</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28742" data-action="comment#reply" data-form-url="/comment/28742/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28742" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28742"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28744" data-disqus-comment-id=""> <a id="comment-28744"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-28742"><small><i class="fas fa-share"></i> Pawel_Liszka</small></a> <a id="comment-28744" class="text-black-2" href="#comment-28744" title="January 24, 2023 14:25" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28744" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Haha, quite "averagely", I would agree! Looking at all the old syntax - the annotations, etc - no fun. We're going to get these out as quickly as we can - I've nearly got all of the audio recorded (and all the video is already done).</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">4</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28744" data-action="comment#reply" data-form-url="/comment/28744/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28744" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28744"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30824" data-disqus-comment-id=""> <a id="comment-30824"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </span> <span class="space-x-1"> <strong>Yangzhi</strong> <a id="comment-30824" class="text-black-2" href="#comment-30824" title="November 17, 2023 09:20" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30824" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at November 17, 2023 10:39"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <pre><code class="language-php"> new Post( '/share_files/upload.{_format}', inputFormats: array('multipart' => 'multipart/form-data'), deserialize: false, processor: UploadFileProcessor::class ), </code></pre> <p>hi,use api upload file,can not use processor,will get </p> <pre><code>"Could not resolve argument $data of \"api_platform.action.placeholder::__invoke()\", maybe you forgot to register the controller as a service or missed tagging it with the \"controller.service_arguments\"?" </code></pre> <p>only working by custom controller。<br />right?<br />thanks</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30824" data-action="comment#reply" data-form-url="/comment/30824/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30824" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30824"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30889" data-disqus-comment-id=""> <a id="comment-30889"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30824"><small><i class="fas fa-share"></i> Yangzhi</small></a> <a id="comment-30889" class="text-black-2" href="#comment-30889" title="November 27, 2023 10:56" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30889" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey @Yangzhi!</p> <p>Sorry for my very slow reply! Ok, on a very low level, the error means that you're missing a "data" request attribute. This is normally set via one of the listeners. I believe, in the case of a POST, that it's set right here - <a href="https://github.com/api-platform/core/blob/main/src/Symfony/EventListener/DeserializeListener.php#L102-L106">https://github.com/api-platform/core/blob/main/src/Symfony/EventListener/DeserializeListener.php#L102-L106</a></p> <p>Assuming I'm correct, the question is: why does that listener exit before setting the request attribute? Based on tour <code>deserialize: false</code> - I'm guessing it's this line - <a href="https://github.com/api-platform/core/blob/main/src/Symfony/EventListener/DeserializeListener.php#L84">https://github.com/api-platform/core/blob/main/src/Symfony/EventListener/DeserializeListener.php#L84</a> - but I know why you have <code>deserialize: false</code>. On the docs - <a href="https://api-platform.com/docs/core/file-upload/">https://api-platform.com/docs/core/file-upload/</a> - they also show setting a custom controller for this (which would not require that data attribute). You might just be missing that part?</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30889" data-action="comment#reply" data-form-url="/comment/30889/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30889" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30889"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30065" data-disqus-comment-id=""> <a id="comment-30065"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </span> <span class="space-x-1"> <strong>Yangzhi</strong> <a id="comment-30065" class="text-black-2" href="#comment-30065" title="July 30, 2023 07:02" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30065" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>hi,the post operation need return one object,but sometimes i want return collection by post, and i created customer controller and uritemplate,can you teach how to return collection please.thanks</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30065" data-action="comment#reply" data-form-url="/comment/30065/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30065" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30065"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="30090" data-disqus-comment-id=""> <a id="comment-30090"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-30065"><small><i class="fas fa-share"></i> Yangzhi</small></a> <a id="comment-30090" class="text-black-2" href="#comment-30090" title="August 1, 2023 17:03" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-30090" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hi @Yangzhi!</p> <p>Hmm. I'm honestly not sure how to do this - and I would avoid it if possible. It's very not RESTful (the POST endpoint is supposed to be a singular endpoint, but in creating a single item and returning a single item), which is fine (you don't always need to follow the result), but as API Platform tries to be RESTful, doing something like this is quite custom. There MAY be some trick to do it, but I'm not sure. Again, I'd try to avoid this... but you could perhaps create a totally custom operation via a controller to try to do this.</p> <p>Good luck and sorry I can't be more helpful!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-30090" data-action="comment#reply" data-form-url="/comment/30090/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-30090" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-30090"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29375" data-disqus-comment-id=""> <a id="comment-29375"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars1.githubusercontent.com/u/2345387?v=4&s=100" alt="Yangzhi avatar"> </span> <span class="space-x-1"> <strong>Yangzhi</strong> <a id="comment-29375" class="text-black-2" href="#comment-29375" title="April 19, 2023 00:53" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29375" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>how to return exception message on production environment?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29375" data-action="comment#reply" data-form-url="/comment/29375/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29375" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29375"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29380" data-disqus-comment-id=""> <a id="comment-29380"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-29375"><small><i class="fas fa-share"></i> Yangzhi</small></a> <a id="comment-29380" class="text-black-2" href="#comment-29380" title="April 19, 2023 16:09" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29380" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at April 19, 2023 16:09"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey @Yangzhi </p> <p>You need to <code>catch</code> the exception, probably in your controller, and just return a response as always, you can set the response with the exception error message, and also set the HTTP status code accordingly</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29380" data-action="comment#reply" data-form-url="/comment/29380/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29380" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29380"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29186" data-disqus-comment-id=""> <a id="comment-29186"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </span> <span class="space-x-1"> <strong>May-S</strong> <a id="comment-29186" class="text-black-2" href="#comment-29186" title="March 23, 2023 12:09" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29186" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hello!<br />Thank you very for the tutos.<br />At the moment I'm trying to set an offset (using offset instead of page), but I cannot override the actual pagination (I cannot setFirstResults of the queries), any ideas plz ?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29186" data-action="comment#reply" data-form-url="/comment/29186/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29186" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29186"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29194" data-disqus-comment-id=""> <a id="comment-29194"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-29186"><small><i class="fas fa-share"></i> May-S</small></a> <a id="comment-29194" class="text-black-2" href="#comment-29194" title="March 24, 2023 19:05" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29194" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at March 24, 2023 19:05"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey @May-S </p> <p>Thanks for your kind words. About your question, I'm not sure what you mean by "using an offset" but have you read the last topics of the documentation? <a href="https://api-platform.com/docs/core/pagination/#controlling-the-behavior-of-the-doctrine-orm-paginator">https://api-platform.com/docs/core/pagination/#controlling-the-behavior-of-the-doctrine-orm-paginator</a><br />I believe you'll need to extend or create a custom paginator</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29194" data-action="comment#reply" data-form-url="/comment/29194/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29194" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29194"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29338" data-disqus-comment-id=""> <a id="comment-29338"></a> <div class="comment-level-2 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </span> <span class="space-x-1"> <strong>May-S</strong> <a href="#comment-29194"><small><i class="fas fa-share"></i> MolloKhan</small></a> <a id="comment-29338" class="text-black-2" href="#comment-29338" title="April 13, 2023 10:30" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29338" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at April 13, 2023 13:53"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey <a href="https://symfonycasts.com/u/MolloKhan">@MolloKhan</a> thanks for your reply.<br />I mean by my question, that I can pass a param named 'offset' or 'started_from' in the query and then this offset which gonna be set in the first result of the query. It's the same aspect searched here <a href="https://github.com/api-platform/core/issues/4672">https://github.com/api-platform/core/issues/4672</a>.<br />I've tried to create an extension for the paginator but the class <a href="https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Extension/PaginationExtension.php">https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Extension/PaginationExtension.php</a> is final. Have any ideas plz ?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29338" data-action="comment#reply" data-form-url="/comment/29338/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29338" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29338"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29366" data-disqus-comment-id=""> <a id="comment-29366"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/MolloKhan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://symfonycasts.com/static/media/cache/avatar_100/uploads/avatars/91ee65.png" alt="MolloKhan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/MolloKhan"> <strong>MolloKhan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-29338"><small><i class="fas fa-share"></i> May-S</small></a> <a id="comment-29366" class="text-black-2" href="#comment-29366" title="April 17, 2023 18:07" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29366" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at April 17, 2023 18:07"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Ohh, it seems like they never implemented that feature. You'll have to <strong>decorate</strong> the <code>PaginationExtension</code> class then, or create a custom paginator. Here's an example about how to decorate an ApiPlatform service <a href="https://api-platform.com/docs/core/state-processors/#creating-a-custom-state-processor">https://api-platform.com/docs/core/state-processors/#creating-a-custom-state-processor</a></p> <p>I hope it helps. Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29366" data-action="comment#reply" data-form-url="/comment/29366/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29366" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29366"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29622" data-disqus-comment-id=""> <a id="comment-29622"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/aa2c3b5141f18b136fcd2ce49d2c41de?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="May-S avatar"> </span> <span class="space-x-1"> <strong>May-S</strong> <a href="#comment-29366"><small><i class="fas fa-share"></i> MolloKhan</small></a> <a id="comment-29622" class="text-black-2" href="#comment-29622" title="May 23, 2023 09:52" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29622" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hello!<br />Thanks, but It does not solve the problem.<br />However I've set a solution, for anybody who need it <a href="https://github.com/api-platform/core/issues/4672#issuecomment-1557480806">https://github.com/api-platform/core/issues/4672#issuecomment-1557480806</a>.</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes">1</span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29622" data-action="comment#reply" data-form-url="/comment/29622/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29622" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29622"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29015" data-disqus-comment-id=""> <a id="comment-29015"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/17546867?v=4&s=100" alt="Rokas-P avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/17546867?v=4&s=100" alt="Rokas-P avatar"> </span> <span class="space-x-1"> <strong>Rokas-P</strong> <a id="comment-29015" class="text-black-2" href="#comment-29015" title="March 2, 2023 16:20" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29015" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Thanks. Though why no information about new state providers?</p> <p>At the moment I'm struggling to use Custom DataProvider with DTO to GetCollection data.<br />I manage to get the data, but the pagination info is gone :(</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29015" data-action="comment#reply" data-form-url="/comment/29015/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29015" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29015"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29025" data-disqus-comment-id=""> <a id="comment-29025"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-29015"><small><i class="fas fa-share"></i> Rokas-P</small></a> <a id="comment-29025" class="text-black-2" href="#comment-29025" title="March 3, 2023 20:59" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29025" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey @Rokas-P!</p> <p>Unfortunately, custom data providers will be covered, but not until episode 3. If you're trying to customize how a collection of entities is returned, then you should use a query extension instead. If this is a more custom source, I haven't done this yet, but you can look at how the ORM pagination works. The process is:</p> <p>A) <code>CollectionProvider</code> is the provider used for the ORM: <a href="https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/State/CollectionProvider.php">https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/State/CollectionProvider.php</a></p> <p>B) At first, it looks like there is nothing related to pagination, and this returns the final result on the bottom. BUT, just above the bottom, it checks to see if any extensions implement <code>QueryResultCollectionExtensionInterface</code>. And they do, it calls them and returns THAT result instead. This is a sneaky way of calling <code>PaginationExtension</code>: <a href="https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Extension/PaginationExtension.php">https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Extension/PaginationExtension.php</a></p> <p>C) <code>PaginationExtension::getResult()</code> returns a <code>Paginator</code> object. THAT is the key. </p> <p>So the long story is that, if you want your custom data provider to allow pagination, instead of returning the array of results, you should return a <code>Paginator</code>. Well, not THAT <code>Paginator</code>, as that's from the ORM. I think you'll need to create a custom class that implements <code>PaginatorInterface</code> (or more likely extends <code>AbstractPaginator</code>).</p> <p>Let me know if this helps :).</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29025" data-action="comment#reply" data-form-url="/comment/29025/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29025" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29025"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28833" data-disqus-comment-id=""> <a id="comment-28833"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/414225?v=4&s=100" alt="Ousmane-N avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/414225?v=4&s=100" alt="Ousmane-N avatar"> </span> <span class="space-x-1"> <strong>Ousmane-N</strong> <a id="comment-28833" class="text-black-2" href="#comment-28833" title="February 6, 2023 20:29" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28833" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Thanks Ryan, nice start ! <br />Any chance to see a tutorial about client generator for nuxt 3 ?</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28833" data-action="comment#reply" data-form-url="/comment/28833/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28833" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28833"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28837" data-disqus-comment-id=""> <a id="comment-28837"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/sadikoff"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/213810?v=4&s=100" alt="sadikoff avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/sadikoff"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/213810?v=4&s=100" alt="sadikoff avatar"> </a> </span> <span class="space-x-1"> <a href="/u/sadikoff"> <strong>sadikoff</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-28833"><small><i class="fas fa-share"></i> Ousmane-N</small></a> <a id="comment-28837" class="text-black-2" href="#comment-28837" title="February 7, 2023 10:02" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28837" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey,</p> <p>Thanks for feedback and course idea!</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28837" data-action="comment#reply" data-form-url="/comment/28837/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28837" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28837"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28764" data-disqus-comment-id=""> <a id="comment-28764"></a> <div class="comment-level-0 pr-4 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </span> <span class="space-x-1"> <strong>Martin-M</strong> <a id="comment-28764" class="text-black-2" href="#comment-28764" title="January 26, 2023 12:51" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28764" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Very nice! Thanks for the good work! Is there any chance you'll be doing an upgrade guide from 2.6/2.7 to >3 like you did for Symfony 5.* to 6? That one helped me a loooot :)</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28764" data-action="comment#reply" data-form-url="/comment/28764/form/reply?offset=1"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28764" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28764"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28782" data-disqus-comment-id=""> <a id="comment-28782"></a> <div class="comment-level-1 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-28764"><small><i class="fas fa-share"></i> Martin-M</small></a> <a id="comment-28782" class="text-black-2" href="#comment-28782" title="January 30, 2023 14:02" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28782" ><span class="text-xs text-black-4 capitalize">2 years ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hey Martin!</p> <p>Hmm, maybe! I have one other friend that is doing the upgrade on a pretty big project and has been hitting some issues. Are there any specific things with upgrading that you're interested in? Or just a general request because you'll need to upgrade an app at some point?</p> <p>Cheers!</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28782" data-action="comment#reply" data-form-url="/comment/28782/form/reply?offset=2"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28782" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28782"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28979" data-disqus-comment-id=""> <a id="comment-28979"></a> <div class="comment-level-2 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </span> <span class="space-x-1"> <strong>Martin-M</strong> <a href="#comment-28782"><small><i class="fas fa-share"></i> weaverryan</small></a> <a id="comment-28979" class="text-black-2" href="#comment-28979" title="February 22, 2023 12:29" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28979" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Hy Ryan,</p> <p>sorry for the late answer.</p> <p>I'm working on a project with multiple Microservices which are based on Symfony 5.4 and Api-platform 2.7. These will have to be upgraded to Symfony6 and Apip3 sooner or later. In my opinion better sooner than later. The heavy lifting was done in the upgrade from 2.6. to 2.7 with the new syntax, but there are some deprecations I just don't seem to get rid off. <br />And that's the point where your upgrading symfony course really helped me and I would have the hopes, that upgrading apip would do the same :D</p> <p>for example: </p> <pre><code>Since api-platform/core 2.7: The $exceptionOnNoToken parameter in "ApiPlatform\Symfony\Security\ResourceAccessChecker::__construct()" is deprecated and will always be false in 3.0, you should stop using it. </code></pre> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28979" data-action="comment#reply" data-form-url="/comment/28979/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28979" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28979"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="28999" data-disqus-comment-id=""> <a id="comment-28999"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://secure.gravatar.com/avatar/d54eb17b197bd0488eff71f9b6a06583?s=100&d=https%3A%2F%2Fsymfonycasts.com%2Fassets%2Fimages%2Favatars%2Fdefault-user.png" alt="Martin-M avatar"> </span> <span class="space-x-1"> <strong>Martin-M</strong> <a href="#comment-28979"><small><i class="fas fa-share"></i> Martin-M</small></a> <a id="comment-28999" class="text-black-2" href="#comment-28999" title="February 24, 2023 08:07" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-28999" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> <span class="italic" title="1 year ago at February 24, 2023 08:08"><span class="text-xs">edited</span></span> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Ignore that deprecation in my last comment. I upgraded to Symfony 6.2 and apip 3.1 just to see if it works and this and another deprecation just went away. A bit jarring for me, because I don't have that much Symfony experience, but sometimes you just have to try.</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-28999" data-action="comment#reply" data-form-url="/comment/28999/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-28999" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-28999"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> <div class="js-comment-container transition-all rounded-md p-2" data-comment-id="29007" data-disqus-comment-id=""> <a id="comment-29007"></a> <div class="comment-level-3 pr-4 py-2 flex justify-start"> <div class="hidden lg:block lg:min-w-fit"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </div> <div class="ml-3 grow min-w-0"> <div class="flex justify-between"> <div> <span class="lg:hidden pr-2 lg:pr-0"> <a href="/u/weaverryan"> <img class="inline lg:block mb-2 w-[25px] h-[25px] lg:w-[42px] lg:h-[42px] rounded" src="https://avatars.githubusercontent.com/u/121003?v=4&s=100" alt="weaverryan avatar"> </a> </span> <span class="space-x-1"> <a href="/u/weaverryan"> <strong>weaverryan</strong> </a> <span class="px-1 font-semibold rounded text-xs text-white" style="background: linear-gradient(332.1deg, #0286C4 8.33%, #FFB800 162.53%);" title="SymfonyCasts Staff">SFCASTS</span> <a href="#comment-28999"><small><i class="fas fa-share"></i> Martin-M</small></a> <a id="comment-29007" class="text-black-2" href="#comment-29007" title="February 27, 2023 17:52" data-controller="comment#setHighlighted:prevent" data-comment-id-param="comment-29007" ><span class="text-xs text-black-4 capitalize">1 year ago</span></a> </span> </div> </div> <div data-controller="highlight-js" class="js-comment-text"> <div class="comment-code prose dark:prose-invert leading-6"> <p>Nice work Martin! That deprecation indeed looks odd. The deprecations system in Symfony is GREAT, but sometimes they're a bit internal and it's not obvious what's needed :)</p> </div> </div> <div class="space-x-3 mt-1 mb-3"> <span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <i class="fal fa-thumbs-up"></i> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content"> Please, log in to vote for this comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> <span class="js-comment-votes"></span> </span> <span>|</span> <a class="js-comment-reply" href="#reply-29007" data-action="comment#reply" data-form-url="/comment/29007/form/reply?offset=3"><i class="fal fa-comments-alt mr-1"></i>Reply</a> <span>|</span> <span data-controller="tooltip" data-tooltip-offset-value="10" data-tooltip-placement-value="bottom" data-action="focusin->tooltip#mouseEnter focusout->tooltip#mouseLeave open->tooltip#mouseEnter" > <a href="#share-29007" title="Share Comment Link" data-action="comment#share" data-target-url="https://symfonycasts.com/screencast/api-platform#comment-29007"><i class="fal fa-share-alt"></i></a> <div data-tooltip-target="block" class=" hidden absolute z-50 inline-block p-2 text-sm text-gray-500 duration-300 bg-white border border-gray-200 rounded-lg shadow-sm dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600"> <div class="text-center" data-tooltip-target="content">Share Comment</div> <div data-tooltip-target="arrow" class="w-[10px] h-[10px] z-10 absolute bg-white border-t border-l border-gray-200 dark:border-gray-600 dark:bg-gray-800"></div> </div> </span> </div> </div> </div> </div> </div> </turbo-frame> </turbo-frame> </div> <div data-controller="modal" data-action="turbo:before-cache@window->modal#close modal:open->modal#open modal:close->modal#close modal:close@window->modal#close" data-comment-target="deleteConfirmModal" data-modal-shown-value="false" data-modal-close-click-outside-value="true" > <dialog class="open:flex p-0 bg-white dark:bg-black-9 text-left transform rounded-lg shadow-xl inset-0 w-full md:w-fit md:max-w-[50%] md:min-w-[50%] animate-fade-in backdrop:bg-slate-600 backdrop:bg-opacity-80 backdrop:backdrop-blur-sm" data-modal-target="dialog" data-action="close->modal#close click->modal#clickOutside" > <div class="flex grow p-5"> <div class="grow overflow-auto justify-center items-center"> <div class="break-words text-center dark:text-white"> <h3 class="p-4 text-2xl text-center font-medium text-black-9 dark:text-white"> Delete comment? </h3> <div class="p-4 flex gap-2 justify-center"> <button data-action="comment#doDelete" class="btn-blue-sm bg-context-orange hover:bg-context-darkred my-3"><i class="fa fa-trash pr-1"></i>Delete</button> <button data-action="modal#close" class="btn-blue-sm my-3"><i class="fa fa-xmark pr-1"></i>Cancel</button> </div> </div> </div> <button class="absolute right-4 top-4 dark:text-white flex items-center opacity-70 transition-opacity hover:opacity-100" data-action="modal#close" type="button" > <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> </dialog> </div> <div class="js-comment-share-modal"> <div data-controller="modal" data-action="turbo:before-cache@window->modal#close modal:open->modal#open modal:close->modal#close modal:close@window->modal#close" data-modal-shown-value="false" data-modal-close-click-outside-value="true" > <dialog class="open:flex p-0 bg-white dark:bg-black-9 text-left transform rounded-lg shadow-xl inset-0 w-full md:w-fit md:max-w-[50%] md:min-w-[50%] animate-fade-in backdrop:bg-slate-600 backdrop:bg-opacity-80 backdrop:backdrop-blur-sm" data-modal-target="dialog" data-action="close->modal#close click->modal#clickOutside" > <div class="flex grow p-5"> <div class="grow overflow-auto justify-center items-center"> <div class="break-words text-center dark:text-white"> <h3 class="p-4 text-2xl text-center font-medium text-black-9 dark:text-white border-b border-black-3 dark:border-black-6"> Share this comment </h3> <div class="m-3"> <input class="bg-black-1 border dark:border-black-7 border-black-2 text-black-5 text-sm rounded-lg focus:ring-transparent focus:border-none p-2 dark:bg-black-7 dark:placeholder-black-5 dark:text-white dark:focus:ring-transparent dark:focus:border-none" type="text" readonly style="width: 100%"> </div> <div class="px-4 py-2 flex gap-2 justify-center"> <button data-action="comment#copyShareUrl" class="js-copy-share-url-btn btn-blue-sm my-3"><i class="fa fa-copy pr-1"></i>Copy link</button> <button data-action="modal#close" class="btn-secondary-sm my-3"><i class="fa fa-xmark pr-1"></i>Cancel</button> </div> </div> </div> <button class="absolute right-4 top-4 dark:text-white flex items-center opacity-70 transition-opacity hover:opacity-100" data-action="modal#close" type="button" > <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> </dialog> </div> </div> <div data-comment-target="noCommentsMessage" style="display: none;"> <div class=""> <img class="mx-auto w-36" src="https://symfonycasts.com/build/images/planet-astronaut.b2e6de60.png" alt="astronaut with balloons in space" loading="lazy"> <p class="text-center mt-4 ml-2"><span class="font-semibold">"Houston: no signs of life" </span><br> <span class="mt-2">Start the conversation!</span></p> </div> </div> </div> </div> <!-- Closes the Course Comments Section --> </div> </div> </div> </div> </main> <footer class="my-10 max-w-7xl mx-auto border-t border-black-2 dark:border-black-6 px-5"> <section class="flex flex-col md:flex-row md:justify-between mb-16 pt-11"> <div> <div class="bg-[url('../images/symfonycasts-logo-dm.svg')] w-[65px] h-[55px] bg-cover bg-no-repeat" alt="SymfonyCasts Logo"></div> <div class="text-[32px] font-semibold mt-4 mb-8 dark:text-white">Where learning is really fun.</div> <div class="text-xs min-[500px]:text-base flex"> <div><a href="/contact" class="btn-secondary-lg whitespace-nowrap">Get in touch<i class="fa-solid fa-envelope pl-2.5"></i></a></div> <div><a href="/pricing" class="btn-blue-lg ml-3 whitespace-nowrap">All Access Pass<i class="fa-solid fa-bolt-lightning pl-2.5"></i></a></div> </div> </div> <div class="flex flex-row mt-6 md:mt-0"> <div class="mr-16"> <ul class="text-[22px] font-semibold dark:text-white"> <li class="pb-3"><a href="/courses#all" class="hover:text-blue-6">Courses</a></li> <li class="pb-3"><a href="/courses#tracks" class="hover:text-blue-6">Tracks</a></li> <li class="pb-3"><a href="/pricing" class="hover:text-blue-6">Pricing</a></li> <li class="pb-3"><a href="/gift-card/" class="hover:text-blue-6">Gift Card</a></li> <li class="pb-3"><a href="/blog" class="hover:text-blue-6">Blog</a></li> </ul> </div> <div> <ul class="text-sm pt-2.5 dark:text-black-4"> <li class="pb-3"><a href="/faq" class="hover:text-blue-6">FAQ</a></li> <li class="pb-3"><a href="/about" class="hover:text-blue-6">About</a></li> <li class="pb-3"><a href="/terms" class="hover:text-blue-6">Terms</a> <span>&</span> <a href="/privacy" class="hover:text-blue-6">Privacy</a></li> <li class="pb-3"><a href="/courses?status=upcoming&sort=popular#all" class="hover:text-blue-6">Roadmap</a></li> <li class="pb-3"><a href="/contact" class="hover:text-blue-6">Contact</a></li> </ul> </div> </div> </section> <section class="flex flex-col md:flex-row md:justify-between"> <div class="dark:text-white"> <a href="https://github.com/SymfonyCasts" class="hover:text-blue-6"><i class="fa-brands fa-github pr-8"></i></a> <a href="https://twitter.com/SymfonyCasts" class="hover:text-blue-6"><i class="fa-brands fa-x-twitter pr-8"></i></a> <a href="https://www.facebook.com/SymfonyCasts/" class="hover:text-blue-6"><i class="fa-brands fa-facebook-f pr-8"></i></a> <a href="https://www.linkedin.com/company/symfonycasts/" class="hover:text-blue-6"><i class="fa-brands fa-linkedin pr-8"></i></a> <span>Powered by <span class="text-blue-6">KnpUniversity</span></span> </div> <div> <p class="dark:text-black-4 mt-6 md:mt-0">Hosted with <i class="fa-solid fa-heart text-red-600"></i> on <a href="https://symfony.com/cloud/" class="underline hover:text-blue-6">platform.sh</a></p> </div> </section> </footer> </body> </html>