agentsclimarketplace

Create admin routing

Skill jeffsenso/prestashop-skills/skills/prestashop-module-development/ps9-core-ai/Component/Controller/skills/create-admin-routing

Prestashop Developer Skills

Install
npx -y skills add jeffsenso/prestashop-skills --skill create-admin-routing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Create the Symfony routing YAML file declaring all admin routes for the domain. Trigger: "create routing for {Domain}".

SKILL.md

3.2 KB, as published. Nobody here has run it

create-admin-routing

Instructions

  1. Create src/PrestaShopBundle/Resources/config/routing/admin/{domain}.yml.
  2. For each action in the controller (listing + form actions), declare a route. Always include _legacy_controller (permanent — see below). While the page is under migration, also include _legacy_feature_flag so requests are dispatched to the new or legacy controller depending on the flag state:
    admin_{domain}s_index:
      path: /{domain}s
      methods: [GET]
      defaults:
        _controller: 'PrestaShopBundle:Admin/{Section}/{Domain}:index'
        _legacy_controller: Admin{Domain}s
        _legacy_feature_flag: {domain}
    
  3. Include routes: index (GET), create (GET+POST), edit (GET+POST with {id} parameter), delete (POST with {id}), toggle status (POST+JSON), bulk delete/enable/disable (POST).
  4. Import this file from the main admin routing file.
  5. CRITICAL: _legacy_feature_flag value must exactly match the name of the feature flag in feature_flag.xml.
  6. Verify with php bin/console debug:router | grep {domain}.

_legacy_controller is permanent

Keep _legacy_controller on every route — it stays for the lifetime of the page, even after full migration. Two consumers depend on it:

  • Permission checks: admin permission rules are keyed by the legacy controller name. Action security expressions like is_granted('read', request.get('_legacy_controller')) rely on this attribute being present
  • Automatic legacy link conversion: third-party modules and old code paths still call Link::getAdminLink('Admin{Domain}s'); the routing layer uses _legacy_controller to resolve those calls to the Symfony route

Removing _legacy_controller after release would silently break permissions and any legacy Link::getAdminLink() callers — never strip it.

_legacy_feature_flag is migration-only

_legacy_feature_flag, in contrast, only exists while the new page coexists with the legacy one. Once the feature flag has been promoted to stable (GA) and the legacy controller is no longer used as a fallback, remove _legacy_feature_flag from the route — but keep _legacy_controller. Routes for fully-released pages have _legacy_controller and no _legacy_feature_flag.

This skill scaffolds routes for pages currently under migration. For routes added or refactored on already-released pages, omit _legacy_feature_flag and keep _legacy_controller.

Rules

Conventions (atomic commit, case-sensitive flag matching, toggle returning JSON, _legacy_controller permanence, post-release flag removal) are in Controller/CONTEXT.md. Skill-specific reminders:

  • Edit and delete routes must include {id} path parameter
  • Toggle status route must allow POST method
  • Never strip _legacy_controller — it remains required for permissions and legacy link conversion long after migration is over

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.