承接 websenso/prestashop-module-devtools 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

websenso/prestashop-module-devtools

Composer 安装命令:

composer require websenso/prestashop-module-devtools

包简介

Tools & script to automatically fix code for PrestaShop modules.

README 文档

README

The ultimate PrestaShop developer tool to test and fix module source code to best fit the PrestaShop Online Module Validator standards.

Support

Built for PrestaShop 8.x & 9.x

Installation

1. Add as a Composer dev dependency

From your module root, run:

composer require --dev websenso/prestashop-module-devtools:^1

Or add it manually to your composer.json:

"require-dev": {
    "websenso/prestashop-module-devtools": "^1"
}

Then run composer install.

2. Run the setup command

After installation, run the setup command from your module root to:

  • Create the validator-api config file and optionally save your API key
  • Download and install the prestashop-module-development skill (via npx skills add if available, or a sparse git clone fallback from jeffsenso/prestashop-skills)
  • Download the PrestaShop 9 core AI context into skills/<skill-path>/ps9-core-ai/ (sparse clone of the .ai/ folder from PrestaShop/PrestaShop@develop)
  • Write .instructions.md (AI coding assistant instructions) to your project root, pointing to the installed skill path
  • Copy .gitlab-ci.yml (example CI pipeline) to your project root
php vendor/bin/lotr --install

.instructions.md is always overwritten with the correct skill path. The skill and ps9-core-ai/ prompt to update if already present. All other files are only created if they do not already exist.

Re-run lotr --install at any time to update the skill and ps9-core-ai/ to the latest version.

3. Configure the licence header stamp

Edit vendor/websenso/prestashop-module-devtools/header-stamp/license_header.txt to set your licence header. Optionally edit license_header_phpDocs.txt as well.

4. Validator API key (online validation only)

If you skipped the API key during --install, edit: vendor/websenso/prestashop-module-devtools/validator-api/config/config.yaml

Get a free API key from https://validator.prestashop.com/.

5. GitLab pipeline

An example CI pipeline for PHP 8 / PrestaShop 8 is available at: vendor/websenso/prestashop-module-devtools/gitlab/.gitlab-ci.yml

It is automatically copied to your project root by --install.

Usage

Run from your module root:

php vendor/bin/lotr
php vendor/bin/lotr --dry-run

LOTR Options

FlagEffect
(none)Apply all fixes
--dry-runPreview changes without writing anything
--installSet up config and copy example files to project root
--releaseCreate a release ZIP after all tools pass
--validate-onlineSubmit the ZIP to validator.prestashop.com
--release --validate-onlineFull release workflow

What LOTR Runs

  1. AutoIndex

    vendor/bin/autoindex prestashop:add:index --exclude=vendor,tests,.devtools,_dev
    
  2. Header Stamp

    php vendor/websenso/prestashop-module-devtools/header-stamp/bin/smart-header-stamp [--dry-run]
    
  3. PS Version Checker

    php vendor/websenso/prestashop-module-devtools/psversion-checker/bin/psversion-checker fix [--dry-run]
    
  4. PS Validator

    php vendor/websenso/prestashop-module-devtools/homemade-ps-validator/bin/homemade-ps-validator validate [--dry-run]
    
  5. PHPStan

    _PS_ROOT_DIR_=<prestashop_root> vendor/bin/phpstan analyse --configuration=vendor/websenso/prestashop-module-devtools/phpstan/phpstan.neon
    
  6. PHP-CS-Fixer

    vendor/bin/php-cs-fixer fix --config=vendor/websenso/prestashop-module-devtools/.php-cs-fixer.dist.php [--dry-run]
    

After all steps pass, optional post-processing runs:

  1. Release ZIP creator (with --release)

    php vendor/websenso/prestashop-module-devtools/release-zip-creator/bin/create-release
    
  2. Online validation (with --validate-online)

    php vendor/websenso/prestashop-module-devtools/validator-api/bin/validate-online
    

AI Assistant integration

Quick start — add your naming conventions: Edit vendor/websenso/prestashop-module-devtools/steering/frameworks/prestashop/custom-patterns.md to set your table prefix, admin tab group, and namespace. The AI assistant loads this file automatically on every task.

The package ships a steering layer (always available in vendor/) and --install downloads two more context layers. Together they write a .instructions.md to your project root that tells the AI assistant to load all three before starting any task.

Note: skills/ is intentionally empty in the Composer package. Skills are never bundled — they are always downloaded fresh by lotr --install.

Layer 0 — Steering (shipped with the package)

Included in the Composer package at vendor/websenso/prestashop-module-devtools/steering/. No download required.

FileTopic
steering/resolver.mdLoad order and conflict resolution rules
steering/frameworks/prestashop/architecture.mdModule layout, DI, Doctrine ORM, FixturesInstaller, theme template injection, translations, Grid gotchas
steering/frameworks/prestashop/coding-standards.mdPHPCS, Symfony patterns, SQL rules, forbidden list
steering/frameworks/prestashop/custom-patterns.mdCompany-specific conventions: table prefix, admin tab group, namespace, validation, service guard patterns

custom-patterns.md ships with Websenso defaults. To apply your own team's naming conventions, edit the file directly at:

vendor/websenso/prestashop-module-devtools/steering/frameworks/prestashop/custom-patterns.md

For per-module overrides (e.g. a specific module that deviates from the team standard), use layer 4: create .ai/projects/<module-slug>/project-context.md at your project root. Rules defined there win over custom-patterns.md.

Layer 1 — prestashop-module-development skill

Downloaded from jeffsenso/prestashop-skills:

  • Primary: npx skills add → installs to skills/.agents/skills/prestashop-module-development/
  • Fallback: sparse git clone → installs to skills/prestashop-module-development/

The .instructions.md written to your project root is automatically updated to point to whichever path was used.

Layer 2 — PrestaShop 9 core AI context (ps9-core-ai/)

Sparse-cloned from PrestaShop/PrestaShop@develop (.ai/ sub-tree only). Placed at skills/<skill-path>/ps9-core-ai/. Provides domain and component contexts for the entire PS9 codebase (~50 domains: CQRS commands, Grid, Forms, Customer, Product, Order, …). Re-run lotr --install at any time to update it.

The installed skill (SKILL.md) is a lean index that delegates to topic-specific reference files under references/:

FileTopic
module-structure.mdFolder layout, namespace, autoloading
module-class-and-installer.mdMain class, hooks, installTabs() / uninstallTabs()
database-and-entities.mdObjectModel vs Doctrine overview
entity-doctrine.mdDoctrine ORM pattern: entity naming, ws_ prefix, Repository, Manager
grid-system.mdGrid definition, QueryBuilder, filters, position
configuration-page.mdSymfony form-based config page
services-and-di.mdservices.yml, common.yml, factory registration
translations.mdTrans domains, catalogue extraction
hooks-and-front-office.mdHook registration, front-office rendering
security.mdCSRF, SQL injection, input validation
legacy-conversion.mdMigrating from ObjectModel / legacy controllers
debugging.mdPHPStan, cache clearing, Symfony debug tools
validation.mdlotr pipeline, PS validator rules

Key rules enforced by the skill

  • No raw SQL outside Repository, Manager, or SqlQueries.php (CREATE/DROP only) — applies to FixturesInstaller, Installer, hooks, and widget methods too.
  • Services splitconfig/common.yml for Doctrine-only dependencies (both kernels); config/admin/services.yml for admin-only services; config/front/services.yml for front-office services. Do NOT create a root-level config/services.yml.
  • Service guard — admin: $this->has() ternary + early return; front-office: plain $this->get() + null check. Never use ContainerFinder.
  • FixturesInstaller must use Db::getInstance() raw SQL — SymfonyContainer::getInstance() returns null in the pr:mo console context, making all Doctrine ORM calls silently no-ops. Db::getValue() appends LIMIT 1 internally — never add it manually.
  • Theme template injection — PS8 does not support theme overrides from modules; use marker-based file patching. Two-class design: ThemeTemplateInjector (service) + ThemeTemplateInstaller (orchestrator). Never use Theme::getThemes() — use scandir(_PS_ALL_THEMES_DIR_) instead.
  • No getTabs() in the main module class — manage tabs via Installer::installTabs() / uninstallTabs().
  • Entity class name = table name without _DB_PREFIX_ — Doctrine derives the table name from the class name. Table prefix convention is defined in steering/frameworks/prestashop/custom-patterns.md.
  • FrameworkBundleAdminController::trans() parameter order is ($id, $domain, $parameters) — NOT Symfony's standard order. Never pass [] as domain.

Contributing

Contributions are welcome! This project is a work in progress and new features, fixes, and improvements are continuously being added.

To report a bug, request a feature, or track ongoing work, please visit the issue tracker: https://gitlab.com/JeffWebsenso/ws-module-devtools/-/work_items

统计信息

  • 总下载量: 147
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-24

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固