{"id":309450,"date":"2021-10-18T05:25:34","date_gmt":"2021-10-18T05:25:34","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=309450"},"modified":"2022-01-17T08:05:11","modified_gmt":"2022-01-17T08:05:11","slug":"create-tabs-in-prestashop-symfony-based-module","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/","title":{"rendered":"Create tabs in PrestaShop Symfony based module"},"content":{"rendered":"\n<p>In this blog, we are going to learn how to create tabs in the PrestaShop back office through the module and manage its permission (ie. create, read, update and delete).<\/p>\n\n\n\n<p>In the PrestaShop back office, the links on the side menu are linked to &#8216;AdminControllers&#8217; and &#8216;ModuleAdminController&#8217; classes. Some links are created at the time of installation of the PrestaShop and some links are created through the module.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tabs registration<\/h2>\n\n\n\n<p>In order to register a new link, add the below code in your main module class. PrestaShop will now use a property called &#8216;$tabs&#8217;, storing an array of link details. Each of them contains a class to add to the side menu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Define a tab in the menu<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\">$this-&gt;tabs = &#091;\n    &#091;\n        &#039;route_name&#039; =&gt; &#039;demo_tab_one&#039;,\n        &#039;class_name&#039; =&gt; DemoTabOneController::TAB_CLASS_NAME,\n        &#039;visible&#039; =&gt; true,\n        &#039;name&#039; =&gt; $tabNames,\n        &#039;icon&#039; =&gt; &#039;settings&#039;,\n        &#039;parent_class_name&#039; =&gt; &#039;IMPROVE&#039;,\n    ]\n];<\/pre>\n\n\n\n<p><strong>Where:<\/strong><br><strong>class_name<\/strong>: Class is called when the user will click on your link. This is the class name without the Controller part.<br><strong>route_name<\/strong>: Symfony route name, if your controller is Symfony-based (Since PrestaShop v1.7.7)<br><strong>name<\/strong>: Label displayed in the menu. If not provided, the class name is shown instead.<br><strong>parent_class_name<\/strong>: The parent menu, if you want to display it in a subcategory.<br><strong>icon<\/strong>: Icon name to use if any<br><strong>visible<\/strong>: Whether you want to display the tab or not. Hidden tabs are used when you don\u2019t need a menu item but you still need to handle access rights.<\/p>\n\n\n\n<p>You can get more information about these parameters on the <a href=\"https:\/\/devdocs.prestashop.com\/1.7\/modules\/concepts\/controllers\/admin-controllers\/tabs\/#how-to-define-a-tab-in-the-menu\" target=\"_blank\" rel=\"noreferrer noopener\">PrestaShop developer documentation<\/a>.<\/p>\n\n\n\n<p>We can also register the tabs manually at the time of module installation:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">private function manuallyInstallTab()\n{\n    $tab = new Tab();\n    $tab-&gt;active = 1;\n    $tab-&gt;class_name = DemoTabTwoController::TAB_CLASS_NAME;\n    \/\/ Only since 1.7.7, you can define a route name\n    $tab-&gt;route_name = &#039;demo_tab_two&#039;;\n    $tab-&gt;name = &#091;];\n    foreach (Language::getLanguages() as $lang) {\n        $tab-&gt;name&#091;$lang&#091;&#039;id_lang&#039;]] = $this-&gt;trans(&#039;Demo tab two&#039;, &#091;], &#039;Modules.Wkadmintabs.Admin&#039;, $lang&#091;&#039;locale&#039;]);\n    }\n    $tab-&gt;icon = &#039;build&#039;;\n    $tab-&gt;id_parent = (int) Tab::getIdFromClassName(&#039;IMPROVE&#039;);\n    $tab-&gt;module = $this-&gt;name;\n\n    return $tab-&gt;save();\n}<\/pre>\n\n\n\n<p>So, let&#8217;s create a simple module &#8220;wkadmintabs&#8221;. Module file and folder structure will be like:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">+---config\n|      |- routes.yml\n|\n+---src\n|   \\---controller\n|       \\---Admin\n|             |-  DemoTabOneController.php\n|             |-  DemoTabTwoController.php\n|\n+---vendor (generated by composer.json)\n|\n\\---views\n|   \\---templates\n|        \\---admin\n|               |- demotabone.html.twig\n|               |- demotabtwo.html.twig\n|\n|-  composer.json\n|-  wkadmintabs.php<\/pre>\n\n\n\n<p>Add the main file &#8216;wkadmintabs.php&#8217; of this module:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?php\n\nif (!defined(&#039;_PS_VERSION_&#039;)) {\n    exit;\n}\n\nuse Language;\nuse PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabOneController;\nuse PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabTwoController;\n\nrequire_once __DIR__ . &#039;\/vendor\/autoload.php&#039;;\n\nclass Wkadmintabs extends Module\n{\n    public function __construct()\n    {\n        $this-&gt;name = &#039;wkadmintabs&#039;;\n        $this-&gt;author = &#039;Webkul&#039;;\n        $this-&gt;version = &#039;1.0.0&#039;;\n        $this-&gt;ps_versions_compliancy = &#091;&#039;min&#039; =&gt; &#039;1.7.7&#039;, &#039;max&#039; =&gt; _PS_VERSION_];\n\n        parent::__construct();\n\n        $this-&gt;displayName = $this-&gt;l(&#039;Admin Controller Tabs&#039;);\n        $this-&gt;description = $this-&gt;l(&#039;Create Tabs in Symfony Controller and manage its Permissions&#039;);\n\n        \/\/ See https:\/\/devdocs.prestashop.com\/1.7\/modules\/concepts\/controllers\/admin-controllers\/tabs\/\n        $tabNames = &#091;];\n        foreach (Language::getLanguages(true) as $lang) {\n            $tabNames&#091;$lang&#091;&#039;locale&#039;]] = $this-&gt;trans(&#039;Demo tab one&#039;, &#091;], &#039;Modules.Wkadmintabs.Admin&#039;, $lang&#091;&#039;locale&#039;]);\n        }\n        $this-&gt;tabs = &#091;\n            &#091;\n                &#039;route_name&#039; =&gt; &#039;demo_tab_one&#039;,\n                &#039;class_name&#039; =&gt; DemoTabOneController::TAB_CLASS_NAME,\n                &#039;visible&#039; =&gt; true,\n                &#039;name&#039; =&gt; $tabNames,\n                &#039;icon&#039; =&gt; &#039;settings&#039;,\n                &#039;parent_class_name&#039; =&gt; &#039;IMPROVE&#039;,\n            ]\n        ];\n    }\n\n    public function install()\n    {\n        return parent::install() &amp;&amp; $this-&gt;manuallyInstallTab();\n    }\n\n    \/**\n     * @return bool\n     *\/\n    private function manuallyInstallTab()\n    {\n        $tab = new Tab();\n        $tab-&gt;active = 1;\n        $tab-&gt;class_name = DemoTabTwoController::TAB_CLASS_NAME;\n        \/\/ Only since 1.7.7, you can define a route name\n        $tab-&gt;route_name = &#039;demo_tab_two&#039;;\n        $tab-&gt;name = &#091;];\n        foreach (Language::getLanguages() as $lang) {\n            $tab-&gt;name&#091;$lang&#091;&#039;id_lang&#039;]] = $this-&gt;trans(&#039;Demo tab two&#039;, &#091;], &#039;Modules.Wkadmintabs.Admin&#039;, $lang&#091;&#039;locale&#039;]);\n        }\n        $tab-&gt;icon = &#039;build&#039;;\n        $tab-&gt;id_parent = (int) Tab::getIdFromClassName(&#039;IMPROVE&#039;);\n        $tab-&gt;module = $this-&gt;name;\n\n        return $tab-&gt;save();\n    }\n}<\/pre>\n\n\n\n<p>Create &#8216;DemoTabOneController.php&#8217; and &#8216;DemoTabTwoController.php&#8217; controller files under the &#8220;Controller\\Admin&#8221; folder:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?php\nnamespace PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin;\n\nuse PrestaShopBundle\\Controller\\Admin\\FrameworkBundleAdminController;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass DemoTabOneController extends FrameworkBundleAdminController\n{\n    const TAB_CLASS_NAME = &#039;WkAdminTabsControllerTabsOne&#039;;\n\n    \/**\n     * @return Response\n     *\/\n    public function indexAction()\n    {\n        return $this-&gt;render(&#039;@Modules\/wkadmintabs\/views\/templates\/admin\/demotabone.html.twig&#039;);\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?php\nnamespace PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin;\n\nuse PrestaShopBundle\\Controller\\Admin\\FrameworkBundleAdminController;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass DemoTabTwoController extends FrameworkBundleAdminController\n{\n    const TAB_CLASS_NAME = &#039;WkAdminTabsControllerTabsTwo&#039;;\n\n    \/**\n     * @return Response\n     *\/\n    public function indexAction()\n    {\n        return $this-&gt;render(&#039;@Modules\/wkadmintabs\/views\/templates\/admin\/demotabtwo.html.twig&#039;);\n    }\n}<\/pre>\n\n\n\n<p>Create &#8216;demotabone.html.twig&#8217; and &#8216;demotabtwo.html.twig&#8217; view files for both controllers under the &#8220;views\/templates\/admin&#8221; folder:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">{% extends &quot;PrestaShopBundle:Admin:layout.html.twig&quot; %}\n{% block content %}\n    &lt;h2&gt;This is tab one content.&lt;\/h2&gt;\n{% endblock %}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\">{% extends &quot;PrestaShopBundle:Admin:layout.html.twig&quot; %}\n{% block content %}\n    &lt;h2&gt;This is tab two content.&lt;\/h2&gt;\n{% endblock %}<\/pre>\n\n\n\n<p>Add &#8216;composer.json&#8217; file and add the module information:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">{\n    &quot;description&quot;: &quot;Create Tabs in Symfony Controller and manage its Permissions&quot;,\n    &quot;autoload&quot;: {\n        &quot;psr-4&quot;: {\n            &quot;PrestaShop\\\\Module\\\\Wkadmintabs\\\\&quot;:  &quot;src\/&quot;\n        }\n    },\n    &quot;config&quot;: {\n        &quot;prepend-autoloader&quot;: false\n    },\n    &quot;type&quot;: &quot;prestashop-module&quot;\n}<\/pre>\n\n\n\n<p>Add &#8216;route.yml&#8217; file to define the routes:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">demo_tab_one:\n    path: wkadmin-tabs\/demotabone\n    methods: &#091;GET]\n    defaults:\n        _controller: &#039;PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabOneController::indexAction&#039;\n\ndemo_tab_two:\n    path: wkadmin-tabs\/demotabtwo\n    methods: &#091;GET]\n    defaults:\n        _controller: &#039;PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabTwoController::indexAction&#039;<\/pre>\n\n\n\n<p>Once you install this module in the PrestaShop, two new menu links are available in the back office:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"263\" height=\"447\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\" alt=\"Create tabs and manage permission admin side menu\" class=\"wp-image-309455\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png 263w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu-177x300.png 177w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu-147x249.png 147w\" sizes=\"(max-width: 263px) 100vw, 263px\" loading=\"lazy\" \/><figcaption>Admin Side Menu<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Tab permissions, accesses and roles<\/h2>\n\n\n\n<p>At the time of the module installation, it automatically creates the appropriate roles in the &#8216;Tab::initAccess&#8217; based on the class_name. For example, we are using &#8216;WkAdminTabsControllerTabsOne&#8217; and &#8216;WkAdminTabsControllerTabsTwo&#8217; as the class name then it will create the following roles in the PrestaShop:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"540\" height=\"275\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/access_control.png\" alt=\"Create tabs and manage permission access control list\" class=\"wp-image-309456\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/access_control.png 540w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/access_control-300x153.png 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/access_control-250x127.png 250w\" sizes=\"(max-width: 540px) 100vw, 540px\" loading=\"lazy\" \/><figcaption>Tab Permissions &amp; Roles<\/figcaption><\/figure><\/div>\n\n\n\n<p>These roles will allow you to manage detailed permission in your controllers.<\/p>\n\n\n\n<p>We can provide access permission for every method used in the admin controller. Here is an example with a Symfony controller (WkAdminTabsControllerTabsOne). <\/p>\n\n\n\n<p>Nothing specific in this controller but notice the security annotation &#8216;@AdminSecurity&#8217; that uses &#8216;request.get(&#8216;_legacy_controller&#8217;)&#8217; which will make the link between this controller and the routing configuration.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">&lt;?php\nnamespace PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin;\n\nuse PrestaShopBundle\\Controller\\Admin\\FrameworkBundleAdminController;\n&lt;strong&gt;use PrestaShopBundle\\Security\\Annotation\\AdminSecurity;&lt;\/strong&gt;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nclass DemoTabOneController extends FrameworkBundleAdminController\n{\n    const TAB_CLASS_NAME = &#039;WkAdminTabsControllerTabsOne&#039;;\n\n    \/**\n     * &lt;strong&gt;@AdminSecurity(&quot;is_granted(&#039;read&#039;, request.get(&#039;_legacy_controller&#039;))&quot;)&lt;\/strong&gt;\n     *\n     * @return Response\n     *\/\n    public function indexAction()\n    {\n        return $this-&gt;render(&#039;@Modules\/wkadmintabs\/views\/templates\/admin\/demotabone.html.twig&#039;);\n    }\n}<\/pre>\n\n\n\n<p>So, let&#8217;s update the &#8216;routes.yml&#8217; file to add the &#8216;_legacy_controller&#8217; parameter:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">demo_tab_one:\n    path: wkadmin-tabs\/demotabone\n    methods: &#091;GET]\n    defaults:\n        _controller: &#039;PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabOneController::indexAction&#039;\n        # _legacy_controller is used to manage permissions\n&lt;strong&gt;        _legacy_controller: WkAdminTabsControllerTabsOne&lt;\/strong&gt;\n\ndemo_tab_two:\n    path: wkadmin-tabs\/demotabtwo\n    methods: &#091;GET]\n    defaults:\n        _controller: &#039;PrestaShop\\Module\\Wkadmintabs\\Controller\\Admin\\DemoTabTwoController::indexAction&#039;\n        # _legacy_controller is used to manage permissions\n&lt;strong&gt;        _legacy_controller: WkAdminTabsControllerTabsTwo&lt;\/strong&gt;<\/pre>\n\n\n\n<p>You can also modify the error message and redirection link.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\">@AdminSecurity(&quot;is_granted(&#091;&#039;read&#039;], request.get(&#039;_legacy_controller&#039;))&quot;,\n    message=&quot;You do not have permission to access this.&quot;,\n    redirectRoute=&quot;some_route_name&quot;\n)<\/pre>\n\n\n\n<p>That\u2019s all about this blog.<\/p>\n\n\n\n<p>If any issue or doubt please feel free to mention it in the comment section.<\/p>\n\n\n\n<p>I would be happy to help.<\/p>\n\n\n\n<p>Also, you can explore our <a href=\"https:\/\/webkul.com\/prestashop-development\/\">PrestaShop Development Services<\/a> &amp; a large range of quality <a href=\"https:\/\/store.webkul.com\/PrestaShop-Extensions.html\">PrestaShop Modules<\/a>.<\/p>\n\n\n\n<p>For any doubt contact us at <a href=\"mailto:support@webkul.com\">support@webkul.com<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog, we are going to learn how to create tabs in the PrestaShop back office through the module and manage its permission (ie. create, read, update and delete). In the PrestaShop back office, the links on the side menu are linked to &#8216;AdminControllers&#8217; and &#8216;ModuleAdminController&#8217; classes. Some links are created at the time <a href=\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":384,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[209],"tags":[2065],"class_list":["post-309450","post","type-post","status-publish","format-standard","hentry","category-prestashop","tag-prestashop"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Create tabs in PrestaShop Symfony based module - Webkul Blog<\/title>\n<meta name=\"description\" content=\"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create tabs in PrestaShop Symfony based module - Webkul Blog\" \/>\n<meta property=\"og:description\" content=\"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-18T05:25:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-17T08:05:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\" \/>\n<meta name=\"author\" content=\"Ajeet Chauhan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ajeet Chauhan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\"},\"author\":{\"name\":\"Ajeet Chauhan\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/7eee8f48857441660231d6a643103357\"},\"headline\":\"Create tabs in PrestaShop Symfony based module\",\"datePublished\":\"2021-10-18T05:25:34+00:00\",\"dateModified\":\"2022-01-17T08:05:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\"},\"wordCount\":544,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\",\"keywords\":[\"prestashop\"],\"articleSection\":[\"prestashop\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\",\"url\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\",\"name\":\"Create tabs in PrestaShop Symfony based module - Webkul Blog\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\",\"datePublished\":\"2021-10-18T05:25:34+00:00\",\"dateModified\":\"2022-01-17T08:05:11+00:00\",\"description\":\"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png\",\"width\":263,\"height\":447,\"caption\":\"side_menu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create tabs in PrestaShop Symfony based module\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/7eee8f48857441660231d6a643103357\",\"name\":\"Ajeet Chauhan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e97b5fe8122a2283f5fe35ae6fca4725ac46026413ce7959b575f842f6bd6c92?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e97b5fe8122a2283f5fe35ae6fca4725ac46026413ce7959b575f842f6bd6c92?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Ajeet Chauhan\"},\"description\":\"Ajeet is a talented Software Engineer specializing in the PrestaShop platform. With expertise in PrestaShop Shipping &amp; Payments Integration, Marketplace Development, and Headless services, he delivers innovative solutions that enhance eCommerce functionality, driving seamless operations for businesses and their customers.\",\"url\":\"https:\/\/webkul.com\/blog\/author\/ajeetchauhan-symfony143\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create tabs in PrestaShop Symfony based module - Webkul Blog","description":"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/","og_locale":"en_US","og_type":"article","og_title":"Create tabs in PrestaShop Symfony based module - Webkul Blog","og_description":"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.","og_url":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2021-10-18T05:25:34+00:00","article_modified_time":"2022-01-17T08:05:11+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png","type":"","width":"","height":""}],"author":"Ajeet Chauhan","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Ajeet Chauhan","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/"},"author":{"name":"Ajeet Chauhan","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/7eee8f48857441660231d6a643103357"},"headline":"Create tabs in PrestaShop Symfony based module","datePublished":"2021-10-18T05:25:34+00:00","dateModified":"2022-01-17T08:05:11+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/"},"wordCount":544,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png","keywords":["prestashop"],"articleSection":["prestashop"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/","url":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/","name":"Create tabs in PrestaShop Symfony based module - Webkul Blog","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png","datePublished":"2021-10-18T05:25:34+00:00","dateModified":"2022-01-17T08:05:11+00:00","description":"How to create tabs and manage its permission in the Symfony based module. Tabs in back office provide facility to navigate links easily.","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/10\/side_menu.png","width":263,"height":447,"caption":"side_menu"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/create-tabs-in-prestashop-symfony-based-module\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create tabs in PrestaShop Symfony based module"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/7eee8f48857441660231d6a643103357","name":"Ajeet Chauhan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e97b5fe8122a2283f5fe35ae6fca4725ac46026413ce7959b575f842f6bd6c92?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e97b5fe8122a2283f5fe35ae6fca4725ac46026413ce7959b575f842f6bd6c92?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Ajeet Chauhan"},"description":"Ajeet is a talented Software Engineer specializing in the PrestaShop platform. With expertise in PrestaShop Shipping &amp; Payments Integration, Marketplace Development, and Headless services, he delivers innovative solutions that enhance eCommerce functionality, driving seamless operations for businesses and their customers.","url":"https:\/\/webkul.com\/blog\/author\/ajeetchauhan-symfony143\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/309450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/384"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=309450"}],"version-history":[{"count":23,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/309450\/revisions"}],"predecessor-version":[{"id":319905,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/309450\/revisions\/319905"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=309450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=309450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=309450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}