• v2.1
    • Versions
    • master
    • v3.0
    • v2.3
    • v2.2
    • v2.1
    • v2.0
    • v1.7
    • v1.6
    • v1.5
    • v1.4
    • v1.3
    • v1.2
    • v1.1
    • v1.0
Caution! You are browsing the documentation for Akeneo in version 2.1, which is not maintained anymore.
Consider upgrading to the latest version.

 

  • Install Akeneo PIM
    • Install Akeneo PIM with Docker
    • Install Akeneo PIM manually
      • System Requirements
      • System installation on Debian 9 (Stretch)
      • System installation on Ubuntu 16.04 (Xenial Xerus)
      • Installing Akeneo PIM Community Edition (CE) with the Archive
      • Installing Akeneo PIM Enterprise Edition (EE) with the Archive
      • Setting up the job queue daemon
    • How to customize the Dataset
    • How to Add Translation Packs
  • Migrate Akeneo PIM projects
  • Import and Export data
    • How import works
    • Understanding the Product Import
    • Understanding the Product Export
    • Formats
      • Localized labels
      • Scopable labels
      • Association types data structure
      • Attribute data structure
      • Category data structure
      • Family data structure
      • Family variant data structure
      • Group data structure
      • Options data structure
      • Product data structure
      • Product model data structure
    • Akeneo Connectors
    • How to Customize Import / Export
      • How to create a new Connector
      • How to import Products from a XML file
      • How to clean a CSV file during a Product import
      • How to automate imports/exports
  • Manipulate the Akeneo PIM data
    • How to Customize Mass Edit Operations
      • How to register a new bulk action
      • How to Register a New Mass Edit Action on Products
      • How to Avoid Rules Execution on Mass Edit Actions
    • How to Manipulate Products
      • How to Query Products
      • How to Create Products
      • How to Update Products
      • How to Validate Products
      • How to Save Products
      • How to Remove Products
    • How to Manipulate Non-Product Objects
      • How to Query Non-Product Objects
      • How to Create Non-Product Objects
      • How to Update Non-Product Objects
      • How to Validate Non-Product Objects
      • How to Save Non-Product Objects
      • How to Remove Non-Product Objects
    • How to add a custom action rule
      • General information about rule format
      • How to add a custom action in the rule engine
    • How to Define Access Control List
    • How to Customize the Catalog Structure
      • How to Create a Reference Data
      • How to add a custom unit of measure
      • How to Add New Properties to a Category
    • How to Customize Product Assets
      • How to Add a New Transformation
      • How to Add a Default Thumbnail For Unknown File Types
      • How to connect to an external server for storage
      • How to change the validation rule to match a reference file to an asset
      • How to Mass Import Assets
    • How To Customize Teamwork Assistant (Enterprise Edition)
      • Customize notifications
      • Add a calculation step
      • How to log calculation step
      • Remove projects impacted by a custom catalog update
  • Design the user interfaces
    • How to customize any frontend part of the application
    • How to add an action button or meta data to the product edit form
    • How to add a tab to a form
    • How to add a new tab in System / Configuration
    • How to add custom information to a field
    • How to add a new field type
    • Create a custom product export builder filter
    • How to create the UI to manage a Reference Data
    • How to add a new page
    • How to customize the main menu
    • Styleguide
  • Maintain Akeneo PIM projects
    • First aid kit
    • Bug qualification
    • Common issues
    • Scalability Guide
      • Audit with 3 Representative Catalogs
      • More than 10k attributes?
      • More than 10k families?
      • More than 10k categories?
      • More than 500 attributes usable in the product grids?
      • More than 100k products to export?
      • More than 1GB of product media to export?
    • How to purge history
      • How to Purge jobs executions
      • How to adapt the version purger to your needs
  • Contribute to Akeneo PIM
    • How to report an issue?
    • How to translate the user interface?
    • How to enhance the documentation?
    • How to contribute to a Connector?
    • How to submit a patch to the PIM?
    • How behavior tests are architectured in the PIM?
      • Establishing Decorator Pattern
      • Using Spin In Behat
  • Technical overview
    • Product Information
    • Teamwork Assistant (Enterprise Edition)
      • Project creation
      • Project completeness
      • Project Completeness widget
      • Catalog update impact
      • Scalability guide
      • Users permission summary for Behat tests
    • Collaborative workflow
      • Simple workflow
      • Partial workflow
  • Technical architecture
    • Best Practices
      • Create a project
      • Create a reusable bundle
      • Setup Behat
      • Code Conventions
      • Coding Standards
    • Bundles
    • Components
    • How to implement your business logic using the event system
    • Events
      • Storage events
      • Workflow events (Enterprise Edition only)
    • How to Localize your data
      • How to change the PIM locale
      • How to Use Localizers
      • How to use Presenters
    • How to Add a Notification
    • Performances Guide
      • Memory usage of rules execution (Enterprise Edition)
      • Memory leak fix in Rules Engine (ORM)
      • More than 100 WYSIWYG editors in a page
      • PHP7 and HHVM Compatibility?
    • How to Use the Web REST API
    • Standard format
      • Products
      • Other entities
      • Usage
    • Application Technical Information
      • Application Technical Dependencies
      • Server side set up for hosting
      • System Requirements
      • Recommended configuration
      • Client side configuration and compatibilities
      • Operation processes
      • Flow Matrix
  • Akeneo Cloud Edition
    • Flexibility Mode
      • Overview
      • Partners Starterkit
      • Environments Access
      • Composer settings
      • Periodic tasks / Crontab settings
      • PIM Application
      • PIM Updates and Migrations
      • Data File Transfer
      • Backups management
      • Partners
      • System Components
    • Serenity Mode
      • Overview
      • PIM Updates and Migrations

How to change the validation rule to match a reference file to an asset¶

This cookbook is about a feature only provided in the Enterprise Edition.

To add files to assets in Akeneo we use a simple mapping strategy to match a filename to a product asset. As an integrator you can customize this rule to fit your own needs.

Let’s say that we only have localizable assets in US english and want to add a suffix to every file we import and remove the 3 first letters of their names.

Override the UploadChecker¶

First, we will override the UploadChecker to be able to provide our own ParsedFilenameInterface implementation.

parameters:
    pimee_product_asset.upload_checker.class: Acme\CustomBundle\ProductAsset\Upload\UploadChecker

We can now create our own ParsedFilename:

<?php

namespace Acme\CustomBundle\ProductAsset\Upload;

use PimEnterprise\Component\ProductAsset\Upload\UploadChecker as BaseUploadChecker;

class UploadChecker extends BaseUploadChecker
{
    /**
     * @param string $filename
     *
     * @return ParsedFilenameInterface
     */
    public function getParsedFilename($filename)
    {
        return new ParsedFilename($this->locales, $filename);
    }
}

Implement the custom logic¶

You can now implement your own custom logic in your own ParsedFilenameInterface implementation:

<?php

namespace Acme\CustomBundle\ProductAsset\Upload;

use PimEnterprise\Component\ProductAsset\Upload\ParsedFilename as BaseParsedFilename;
use Pim\Bundle\CatalogBundle\Model\LocaleInterface;

/**
 * @see FilenameParserInterface
 */
class ParsedFilename extends BaseParsedFilename
{
    /**
     * @param LocaleInterface[] $availableLocales
     * @param                   $rawFilename
     */
    public function __construct(array $availableLocales, $rawFilename)
    {
        $this->rawFilename      = $rawFilename;
        $this->availableLocales = $availableLocales;

        $this->parseRawFilename($this->rawFilename);
    }

    /**
     * {@inheritdoc}
     */
    public function parseRawFilename($rawFilename)
    {
        if (preg_match('/^(?P<name>[0-9a-z-_]+)\.(?P<extension>[0-9a-z]+)$/i', $rawFilename, $matches)) {
            $customName = substr($matches['name'], 3) . '_custom_suffix';

            $this->assetCode  = strlen($matches['name']) > 0 ? $customName : null;
            $this->localeCode = 'en_US';
            $this->extension  = $matches['extension'];
        }
    }
}

You can now imagine implementing your own logic and customize this rule as you want.


Found a typo or a hole in the documentation and feel like contributing?
Join us on Github!