### Example: Set Assortment Tenant and Get Product List Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Index_Service/Product_Index_Configuration/Assortment_Tenant_Configuration This example demonstrates how to set a specific assortment tenant and then retrieve a product list configured for that tenant. ```php getEnvironment(); $environment->setCurrentAssortmentTenant("elasticsearch"); //getting suitable product list $productlist = $factory->getIndexService()->getProductListForCurrentTenant(); //doing stuff with product list ``` -------------------------------- ### Install Pimcore Locally with PaaS Profile Source: https://docs.pimcore.com/platform/Paas/Quick_Start_New_Project Install Pimcore locally using the PaaS install profile to test your setup. This may prompt for service connections and take up to 20 minutes. ```bash ./vendor/bin/pimcore-install --install-profile='Pimcore\Paas\Install\PaasProfile' ``` -------------------------------- ### List Index Fields Example Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Studio Example GET request to list product index fields, with optional filtering by filter group, tenant, and visibility. ```http GET /fields?filtergroup=category,price&tenant=default&showAllFields=true ``` -------------------------------- ### Working with Checkout Steps Example Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Checkout_Manager/Checkout_Steps Demonstrates how to interact with the Checkout Manager to retrieve, commit, and save checkout steps. This example shows getting a specific step, committing data to it, and then saving the cart. ```php getCheckoutManager($cart); $step = $manager->getCheckoutStep("deliveryaddress"); $address = new stdClass(); //fill address $manager->commitStep($step, $address); $step = $manager->getCheckoutStep("deliverydate"); $manager->commitStep($step, $data); $cart->save(); ``` -------------------------------- ### Initialize and Setup Filter Service in Controller Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Filter_Service This PHP code demonstrates how to initialize the Ecommerce Factory, get the Index Service, create a product listing, and set up the Filter Service with parameters from the request. It also shows how to integrate Knp Paginator for handling pagination. ```php query->all(), $request->attributes->all()); $indexService = $ecommerceFactory->getIndexService(); $productListing = $indexService->getProductListForCurrentTenant(); $templateParams['productListing'] = $productListing; //get filter definition from document, category or global settings $filterDefinition = //TODO ...get from somewhere; // create and init filter service $filterService = $ecommerceFactory->getFilterService(); (new \Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper)->setupProductList($filterDefinition, $productListing, $params, $filterService, true, true); $templateParams['filterService'] = $filterService; $templateParams['filterDefinition'] = $filterDefinition; // inject and use Knp Paginator service: PaginatorInterface $paginator $paginator = $paginator->paginate( $productListing, $request->get('page', 1), 18 ); $templateParams['results'] = $paginator; $templateParams['paginationVariables'] = $paginator->getPaginationData(); return $this->render('Path/template.html.twig', $templateParams); ``` -------------------------------- ### Implement Bundle Installer Source: https://docs.pimcore.com/platform/Pimcore/Extending_Pimcore/Pimcore_Bundle_Developers_Guide/Pimcore_Bundles/Installers Implement the `getInstaller` method in your bundle class to return an instance of your installer. Return null if no installation routines are needed. ```php container->get(Installer::class); } } ``` -------------------------------- ### Install PaaS Configuration Files Source: https://docs.pimcore.com/platform/Paas/Quick_Start_Existing_Project Install the necessary PaaS-specific configuration files and directories into your project. ```bash ./vendor/bin/pimcore-paas-install-config ``` -------------------------------- ### Get Pricing Rule Example Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Studio Example GET request to retrieve the full details of a specific pricing rule by its ID. ```http GET /pricing/rules/6 ``` -------------------------------- ### Example: Get Cities by Country and Zip Source: https://docs.pimcore.com/platform/Pimcore/Objects/Working_with_Objects_via_PHP_API Demonstrates fetching lists of cities by country and individual cities by zip code, including options for limiting results. ```php getZip(); ... } // get a city by zip $city = DataObject\City::getByZip(5020, 1); $city->getZip(); // do something with the city // get the first 10 cities in Austria $list = DataObject\City::getByCountry("AT", 10); foreach ($list as $city) { // do something with the cities $city->getZip(); } ``` -------------------------------- ### Start Docker Services Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Demo_Enterprise_Installation Start all necessary Docker services for the Pimcore demo enterprise installation. Ensure your local user and group IDs are correctly configured in the docker-compose.yaml file. ```bash docker compose up -d ``` -------------------------------- ### Install Bundle via Console Source: https://docs.pimcore.com/platform/Targeting/Installation Execute the console command to complete the bundle installation. ```bash bin/console pimcore:bundle:install PimcorePersonalizationBundle ``` -------------------------------- ### Install E-Commerce Framework Bundle Source: https://docs.pimcore.com/platform/Ecommerce_Framework/Installation Use Composer to install the E-Commerce Framework bundle. This command fetches and installs the necessary package files. ```bash composer require pimcore/ecommerce-framework-bundle ``` -------------------------------- ### Install Customer Management Framework Bundle Source: https://docs.pimcore.com/platform/Customer_Management_Framework/Installation Use Composer to install the CMF bundle. This command fetches and installs the necessary package files. ```bash composer require pimcore/customer-management-framework-bundle ``` -------------------------------- ### Install Bundle via Console Command Source: https://docs.pimcore.com/platform/TinyMCE_WYSWIYG_Editor/Installation After enabling the bundle, run this console command to complete the installation process. ```bash bin/console pimcore:bundle:install PimcoreTinymceBundle ``` -------------------------------- ### Use Pimcore Install Profile Locally Source: https://docs.pimcore.com/platform/Paas/Configuration Use the same PaaS install profile for local installations. The installer will prompt interactively for service connections. ```bash ./vendor/bin/pimcore-install --install-profile='Pimcore\Paas\Install\PaasProfile' ``` -------------------------------- ### Install OptiPng Source: https://docs.pimcore.com/platform/Getting_Started/Installation/System_Setup_and_Hosting/Additional_Tools_Installation Installs OptiPng for optimizing PNG images. It is a lossless PNG optimizer. ```bash sudo apt-get install optipng ``` -------------------------------- ### Install Bundle via Console Command Source: https://docs.pimcore.com/platform/Generic_Data_Index/Installation Run the Pimcore console command to complete the bundle installation process. ```bash bin/console pimcore:bundle:install PimcoreGenericDataIndexBundle ``` -------------------------------- ### Install Pimcore Copilot Bundle via Console Source: https://docs.pimcore.com/platform/Copilot/Installation Run this command to install the bundle after adding it to your project. ```bash bin/console pimcore:bundle:install PimcoreCopilotBundle ``` -------------------------------- ### Install Translations Provider Interface Bundle via Console Source: https://docs.pimcore.com/platform/Translation_Provider_Interfaces/Installation_and_Configuration Execute this command to finalize the installation of the bundle after enabling it. ```bash bin/console pimcore:bundle:install PimcoreTranslationsProviderInterfaceBundle ``` -------------------------------- ### Install WebP Support Source: https://docs.pimcore.com/platform/Getting_Started/Installation/System_Setup_and_Hosting/Additional_Tools_Installation Installs the WebP image format library. This enables support for WebP images in Pimcore. ```bash sudo apt-get install webp ``` -------------------------------- ### Full Configuration Example for GEE Activation Source: https://docs.pimcore.com/platform/Copilot/Upgrade_Notes/Migrate_From_JEE_To_GEE A complete configuration example demonstrating how to activate the Generic Execution Engine within the Copilot bundle settings. ```yaml pimcore_copilot: config_location: automation_actions: write_target: type: 'settings-store' interaction_actions: write_target: type: 'settings-store' execution_engine: engine: !php/const Pimcore\Bundle\CopilotBundle\JobExecutionEngine\Enum\ExecutionEngines::GENERIC_EXECUTION_ENGINE ``` -------------------------------- ### Upgrade Configuration Example Source: https://docs.pimcore.com/platform/Targeting/Installation/Upgrade This snippet shows an example of configuration settings that might need adjustment during an upgrade to version 2.0.0. ```php 'user_count' => 2, 'user_type' => 'college', ], ]; ``` -------------------------------- ### Platform.sh PaaS Install Profile Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Advanced_Installation_Topics/Install_Step_Filtering This profile skips installation steps handled by the Platform.sh deployment pipeline, such as environment variable setup, Doctrine configuration, and asset installation. It implements the InstallStepFilterInterface to define which steps to skip. ```php getCheckoutManager($cart); $order = $manager->commitOrder(); ``` -------------------------------- ### Configure and Start Docker Services Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Skeleton_Installation Adjust the container user to match your local user and then start all necessary services using Docker Compose. ```bash sed -i "s|user: '1000:1000'|user: '$(id -u):$(id -g)'|g" docker-compose.yaml docker compose up -d ``` -------------------------------- ### GraphQL Response for Get Translation Source: https://docs.pimcore.com/platform/Datahub/GraphQL/Query/Query_Samples/Sample_GetTranslation This is an example of the JSON response received after querying for a translation. It includes the localized translations, domain, key, and type. ```json { "data": { "getTranslation": { "translations": "{\"de\":\"\",\"en\":\"\",\"fr\":\"\"}", "domain": "messages", "key": "BMW", "type": "simple" } } } ``` -------------------------------- ### Implement PostInstallHookInterface for Database Operations Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Advanced_Installation_Topics/Post_Install_Commands Implement `PostInstallHookInterface` to execute custom setup logic with direct database access after all post-install commands have finished. The `postInstall` method receives the Doctrine `Connection` and Symfony `OutputInterface`. ```php writeln('Running custom data migration...'); $connection->executeStatement('INSERT INTO ...'); } } ``` -------------------------------- ### Get Asset Listing with Sorting Source: https://docs.pimcore.com/platform/Datahub/GraphQL/Query/Asset_Queries Sort asset listings by specifying 'sortBy' and 'sortOrder' parameters. This example sorts by filename in descending order. ```graphql { getManufacturerListing(sortBy: "filename", sortOrder: "DESC") { edges { node { id name } } } } ``` -------------------------------- ### Start Import Process Source: https://docs.pimcore.com/platform/Data_Importer/Studio Initiates the data import process for a specified configuration. ```http PUT /config/my-product-import/start-import ``` -------------------------------- ### Hugging Face Text to Image Detailed Configuration Example Source: https://docs.pimcore.com/platform/Copilot/Included_Actions/AI_Integrations_Powered_By_Hugging_Face/Hugging_Face_Text_to_Image An example demonstrating the full configuration for the Hugging Face Text to Image Action, including advanced parameters for image generation such as height, width, negative prompt, guidance scale, and inference steps, along with options for caching. ```yaml # Specifies the model's endpoint. model_endpoint: 'https://router.huggingface.co/hf-inference/models/stabilityai/stable-diffusion-3-medium-diffusers' # Specifies the folder for storing generated images. asset_folder: '/AI Generated' # This field within the Data Object is where the generated image will be stored. output_field: 'AIGeneratedImage' # Twig template that constructs the prompt sent to the image generation model. prompt_template: "Realistic picture of {{ subject.name }}, production year: {{ subject.productionYear }}, {{ subject.color|join(',') }}, detailed, 8k" # Twig template to generate the filename based on Data Object or Asset fields. filename_template: "{{ subject.name|replace({' ': '-'}) }}-{{ random() }}" parameters: height: 600 width: 800 negative_prompt: "ugly, deformed, disfigured, poor details, bad anatomy" guidance_scale: 8.5 num_inference_steps: 80 options: # Uses cached images for similar requests to speed up response times. Set to false for new images per request. use_cache: true ``` -------------------------------- ### Run Pimcore Installer with Demo Enterprise Profile Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Demo_Enterprise_Installation Execute the Pimcore installer using the demo enterprise profile. This command will automatically configure the environment, import demo data, and set up the database schema and admin user. Product registration is mandatory for completion. ```bash docker compose exec php vendor/bin/pimcore-install \ --install-profile='App\Installer\DemoEnterpriseProfile' ``` -------------------------------- ### Set OpenSearch DSN Environment Variable Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Advanced_Installation_Topics/Pimcore_Studio_Setup Configure the OpenSearch connection using the PIMCORE_OPENSEARCH_DSN environment variable. This example shows a typical setup for bundled OpenSearch with security enabled. ```env PIMCORE_OPENSEARCH_DSN=opensearch://admin:gBsVe!Dut723@opensearch:9200?ssl=true&ssl_verify=false ``` -------------------------------- ### Install Studio Backend Bundle with Composer Source: https://docs.pimcore.com/platform/Studio_Backend/Installation_and_Configuration Use this command to install the Studio Backend Bundle and its dependencies via Composer. ```bash composer require pimcore/studio-backend-bundle ``` -------------------------------- ### Asset Text Generation Configuration Source: https://docs.pimcore.com/platform/Copilot/Included_Actions/AI_Integrations_Powered_By_Hugging_Face/Hugging_Face_Text_Generation Example configuration for generating text related to an Asset, saving it to a specific metadata field. This setup is useful for generating descriptions or other text-based metadata for assets. ```yaml model_endpoint: '' output_targets: save_on_subject: true save_on_execution_context: true output_field: CarImages.text language: en prompt_template: "Describe a car with following parameters: {{ subject.getMetadata('title') }}". ``` -------------------------------- ### Example Build Hook Sourcing Environment Variables Source: https://docs.pimcore.com/platform/Paas/Environment_Variables_Reference This build hook ensures that environment variables defined in `.platform-scripts/build/export-vars.sh` are sourced before running composer install. This is crucial for build-time variables like DATABASE_URL. ```yaml hooks: build: | set -e . .platform-scripts/build/export-vars.sh composer install --no-interaction --optimize-autoloader ``` -------------------------------- ### Run Studio Dashboards Bundle Installer Source: https://docs.pimcore.com/platform/Studio_Dashboards/Installation Execute this command to register the necessary user permissions for the Studio Dashboards bundle. ```bash bin/console pimcore:bundle:install PimcoreStudioDashboardsBundle ``` -------------------------------- ### Get Link HTML in Frontend Template Source: https://docs.pimcore.com/platform/Pimcore/Objects/Object_Classes/Data_Types/Others In frontend templates, retrieve the link object using the getter method and then call getHtml() to render the link. This example assumes the object is fetched by its ID. ```php ``` -------------------------------- ### Get Manufacturer Listing with Pagination and Sorting Source: https://docs.pimcore.com/platform/Datahub/GraphQL/Query/Query_Samples/Sample_Manufacturer_Listing This example demonstrates how to fetch a list of manufacturers, applying a limit, offset, and sorting by name. It shows the GraphQL query structure and the expected response format. ```APIDOC ## Get Manufacturer Listing ### Description Retrieves a paginated list of manufacturers, allowing for sorting by a specified field. ### Query This is a GraphQL query to fetch manufacturer data. #### Arguments - `first` (Int) - The maximum number of results to return (limit). - `after` (Int) - The offset for pagination, indicating the starting point of the results. - `sortBy` (String) - The field by which to sort the results (e.g., "name"). ### Request Example ```graphql { getManufacturerListing(first: 3, after: 1, sortBy: "name") { edges { node { id name logo { id fullpath } } } totalCount } } ``` ### Response Example ```json { "data": { "getManufacturerListing": { "edges": [ { "node": { "id": "28", "name": "Alfa Romeo", "logo": { "id": "290", "fullpath": "/Brand%20Logos/Alfa_Romeo_logo.png" } } }, { "node": { "id": "240", "name": "Aston Martin", "logo": { "id": "291", "fullpath": "/Brand%20Logos/Aston_Martin_Logo_2018.png" } } }, { "node": { "id": "35", "name": "Austin-Healey", "logo": { "id": "292", "fullpath": "/Brand%20Logos/Austin-Healey-Logo.jpg" } } } ], "totalCount": 27 } } } ``` ``` -------------------------------- ### Fetch Document Translation Links Source: https://docs.pimcore.com/platform/Datahub/GraphQL/Query/Document_Queries Retrieve a document page by ID and query its translations. This example shows how to get the ID, language, and target full path for each translation, including headless documents. ```graphql { getDocument(id: 76) { ... on document_page { id translations { id language target { ... on document_headlessdocument { fullpath } } } } } } ``` -------------------------------- ### Start Import Process Source: https://docs.pimcore.com/platform/Data_Importer/Studio Initiates the import process for the current configuration. ```APIDOC ## PUT /config/{configName}/start-import ### Description Initiates the import process for the current configuration. ### Method PUT ### Endpoint /config/{configName}/start-import ``` -------------------------------- ### S3 Private Bucket Policy Source: https://docs.pimcore.com/platform/Paas/Configuration Example S3 bucket policy for private files. This policy grants full access (list, get, put, replicate, delete) to a designated IAM user for private files. ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::id:user/username" }, "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:ReplicateObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::pimcore-private/*", "arn:aws:s3:::pimcore-private" ] } ] } ``` -------------------------------- ### Example Wrapper Repository Source: https://docs.pimcore.com/platform/Studio_Backend/Extending/Perspectives/Extending_Widgets Implement a wrapper repository that indicates it only loads existing configurations and does not support write operations. This repository throws `NotWriteableException` for create, update, and delete operations. ```php configurationRepository->get($widgetId); if (!is_array($data) || $data[0] === null) { return []; } return $data; } /** * @throws NotFoundException|NotWriteableException */ public function listConfigurations(): array { // Each item must include at least id, name, and icon return $this->configurationRepository->listConfigurations(); } /** * @throws NotWriteableException */ public function deleteConfiguration(string $widgetId): void { throw new NotWriteableException( 'myType', 'Deleting my_custom_widget_type via widgets is not supported.' ); } } ``` -------------------------------- ### Push Code to Deploy to PaaS Source: https://docs.pimcore.com/platform/Paas/Quick_Start_New_Project Initiate the deployment process by pushing your local code changes to the 'pimcore' remote's 'main' branch. This triggers the build, dependency installation, service deployment, and application setup on the PaaS. ```bash git push pimcore main ``` -------------------------------- ### GraphQL Response for Get Asset Source: https://docs.pimcore.com/platform/Datahub/GraphQL/Query/Query_Samples/Sample_GetAsset This is an example of a successful GraphQL response when querying for asset details. It includes the requested fields such as ID, fullpath, thumbnail URLs, resolutions, srcset, type, mimetype, filesize, and base64 encoded data. ```json { "data": { "getAsset": { { "data": { "getAsset": { "id": "4", "fullpath": "/Car%20Images/jaguar/auto-automobile-automotive-192499.jpg", "assetThumb": "/Car%20Images/jaguar/4/image-thumb__4__exampleCover/auto-automobile-automotive-192499.jpg", "assetThumb2": "/Car%20Images/jaguar/4/image-thumb__4__content/auto-automobile-automotive-192499.webp", "resolutions": [ { "url": "//Car%20Images/jaguar/image-thumb__4__content/auto-automobile-automotive-192499~-~768w@2x.jpg", "resolution": 2 }, { "url": "//Car%20Images/jaguar/image-thumb__4__content/auto-automobile-automotive-192499~-~768w@5x.jpg", "resolution": 5 } ] "srcset": [ { "descriptor": "768w", "url": "//Car%20Images/jaguar/image-thumb__4__content/auto-automobile-automotive-192499~-~768w.webp" "resolutions": [ { "url": "//Car%20Images/jaguar/image-thumb__4__content/auto-automobile-automotive-192499~-~768w@2x.webp", "resolution": 2 }, { "url": "//Car%20Images/jaguar/image-thumb__4__content/auto-automobile-automotive-192499~-~768w@5x.webp", "resolution": 5 } ] } ], "type": "image", "mimetype": "image/jpeg", "filesize": 113895, "data": "UklGRjh............." } } } } ``` -------------------------------- ### Install Pimcore Datahub Webhooks Bundle Source: https://docs.pimcore.com/platform/Datahub_Webhooks/Installation Run this console command after enabling the bundle in `config/bundles.php` to complete the installation. ```bash bin/console pimcore:bundle:install PimcoreDataHubWebhooksBundle ``` -------------------------------- ### Apache Virtual Host Configuration for HTTPS Source: https://docs.pimcore.com/platform/Getting_Started/Installation/System_Setup_and_Hosting/Apache_Configuration Example configuration for an Apache virtual host serving content over HTTPS. It includes SSL certificate paths, document root, PHP FastCGI setup, and essential rewrite rules for Pimcore. ```apache ServerName YOURPROJECT.local DocumentRoot /var/www/public SetHandler "proxy:unix:/var/run/php/pimcore.sock|fcgi://localhost" Options FollowSymLinks AllowOverride All Require all granted SSLEngine on SSLCertificateFile /etc/letsencrypt/live/YOURPROJECT.local/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/YOURPROJECT.local/privkey.pem RewriteEngine On RewriteRule ".*" "-" [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] ErrorLog ${APACHE_LOG_DIR}/YOURPROJECT.local_443_error.log CustomLog ${APACHE_LOG_DIR}/YOURPROJECT.local_443_access.log combined ``` -------------------------------- ### Run Pimcore Installer Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Skeleton_Installation Execute the Pimcore installer with the SkeletonProfile to set up the application. This command configures the database, creates the admin user, and builds the search index. ```bash docker compose exec php vendor/bin/pimcore-install --install-profile='App\Installer\SkeletonProfile' ``` -------------------------------- ### Complete HTML Example for Direct Edit Integration Source: https://docs.pimcore.com/platform/Direct_Edit/Integrate_into_Custom_Application This HTML structure includes Bootstrap and jQuery, configures the direct edit settings, loads the necessary JavaScript, and initializes direct edit buttons for assets. It demonstrates a typical frontend setup for direct editing. ```html ;
{% for asset in assetList %} {% if permissionService.hasAssetPermission(asset) %} {% endif %} {% endfor %}
{{ asset.id }} {{ asset.getThumbnail('test-100by100').getHtml() | raw }}
``` -------------------------------- ### RGBA Color API Examples Source: https://docs.pimcore.com/platform/Pimcore/Objects/Object_Classes/Data_Types/Others Interact with RGBA color fields by retrieving the color object and using its methods to get hex values, RGBA values as an array, or set new RGBA values. RGB and Alpha are stored in separate database columns as hex values. ```php $o = \Pimcore\Model\DataObject\User::getById(50); // get the color, can be null! $color = $o->getMyColor(); // get the RGB part as hex with leading # var_dump($color->getHex()); // get the RGBA value (with alpha component) has without leading hash var_dump($color->getHex(true, false)); // get the RGBA value as array (R,G,B 0-255, Alpha 0-1) var_dump($color->getCssRgba(true, true)); // set the RGBA value $color->setRgba(0, 0, 255, 64); ``` -------------------------------- ### Implement InstallStepFilterInterface Source: https://docs.pimcore.com/platform/Getting_Started/Installation/Advanced_Installation_Topics/Install_Step_Filtering Profiles opt into step filtering by implementing this interface. It requires a single method that returns an array of `InstallStep` enum cases to be skipped during installation. ```php */ public function getSkippedInstallSteps(): array; } ``` -------------------------------- ### Multi-Bundle Static Resource Configuration Example Source: https://docs.pimcore.com/platform/Studio_UI/Configuration_and_Administration/Configuration/Additional_CSS_or_JS_Files Demonstrates how static resources from multiple bundles are automatically merged. Duplicates are handled. ```yaml pimcore_studio_ui: static_resources: css: - /bundles/bundlea/css/bundle-a-styles.css editmode: css: - /bundles/bundlea/css/bundle-a-editmode.css ``` ```yaml pimcore_studio_ui: static_resources: css: - /bundles/bundleb/css/bundle-b-styles.css editmode: css: - /bundles/bundleb/css/bundle-b-editmode.css ``` -------------------------------- ### Define Installer Service Source: https://docs.pimcore.com/platform/Pimcore/Extending_Pimcore/Pimcore_Bundle_Developers_Guide/Pimcore_Bundles/Installers Register your installer class as a service in the service container. This allows Pimcore to fetch and use your installer instance. ```yaml services: App\Installer: public: true ``` -------------------------------- ### Update Pimcore Installer Command Source: https://docs.pimcore.com/platform/Pimcore_Platform/Updating_Pimcore/Release_Notes/01_2026.1/Migration_Guide If using the Pimcore installer in CI/CD pipelines, update the command to use the new profile-based installation method. ```bash vendor/bin/pimcore-install --install-profile= ``` -------------------------------- ### Install PDF Generation Tools (LibreOffice, etc.) Source: https://docs.pimcore.com/platform/Getting_Started/Installation/System_Setup_and_Hosting/Additional_Tools_Installation Installs LibreOffice, poppler-utils, and Inkscape for local PDF generation and manipulation. Ensure all dependencies are met. ```bash sudo apt-get install libreoffice libreoffice-script-provider-python libreoffice-math xfonts-75dpi poppler-utils inkscape libxrender1 libfontconfig1 ghostscript ```