php artisan boost:add-skill symkit/page-bundle
Save this content to: .cursor/rules/xml-config.mdc
# XML Configuration Conventions
## When to Use XML
- XML service definitions are needed only for bundles with services beyond the bundle class itself
- With AbstractBundle, simple bundles (config + prepend only) do NOT need XML service files
- Use XML when the bundle registers services, listeners, compiler passes, etc.
- Never use YAML for service definitions (avoids yaml dependency)
## Service Definitions
- Defaults: `autowire="true" autoconfigure="true" public="false"`
- Prefix all service IDs with bundle alias: `acme_blog.service_name`
- Interface aliases for type-hinted injection
- Only make services `public` when the host app explicitly needs `$container->get()`
## Doctrine Mappings
- File naming: `{EntityName}.orm.xml`
- Table naming: always prefix with bundle alias — `acme_blog_article`
- Column naming: `snake_case` via `column` attribute for camelCase PHP properties
- Index naming: `idx_{alias}_{description}` to avoid collisions
- Full XSD schema location for IDE completion
## Example Service
```xml
<defaults autowire="true" autoconfigure="true" public="false" />
<service id="acme_blog.article_manager"
class="Acme\BlogBundle\Service\ArticleManager">
<argument>%acme_blog.api_key%</argument>
</service>
<service id="Acme\BlogBundle\Contract\ArticleManagerInterface"
alias="acme_blog.article_manager" />
```
## After Every Change
Run `make quality` to validate the full pipeline.
autowire="true" autoconfigure="true" public="false"acme_blog.service_namepublic when the host app explicitly needs $container->get(){EntityName}.orm.xmlacme_blog_articlesnake_case via column attribute for camelCase PHP propertiesidx_{alias}_{description} to avoid collisions<defaults autowire="true" autoconfigure="true" public="false" />
<service id="acme_blog.article_manager"
class="Acme\BlogBundle\Service\ArticleManager">
<argument>%acme_blog.api_key%</argument>
</service>
<service id="Acme\BlogBundle\Contract\ArticleManagerInterface"
alias="acme_blog.article_manager" />
Run make quality to validate the full pipeline.
How can I help you explore Laravel packages today?