Global navigation

   Documentation Center
   eZ Studio & eZ Platform
     User Manual
     Technical Manual
   eZ Publish 4.x / legacy

eZ Publish (5.x)

eZ Publish 5.x | For eZ Platform & eZ Studio topics see Technical manual and User manual, for eZ Publish 4.x and Legacy topics see eZ Publish legacy

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


Go to the eZ publish installation

cd <ezpublish installation root>

Generate a new BundlBundle

php app/console generate:bundle

Now follow the instructions 

add a Command directory to the bundle

add the following class file. This will create a bundle eZ/Publish/Bundle/CookBookBundle in the src directory of the installation root.




Code Block
  Welcome to the Symfony2 bundle generator  

Your application code must be written in bundles. This command helps
you generate them easily.

Each bundle is hosted under a namespace (like Acme/Bundle/BlogBundle).
The namespace should begin with a "vendor" name like your company name, your
project name, or your client name, followed by one or more optional category
sub-namespaces, and it should end with the bundle name itself
(which must have Bundle as a suffix).

See for more
details on bundle naming conventions.

Use / instead of \  for the namespace delimiter to avoid any problem.

Bundle namespace: eZ/Publish/Bundles/CookbookBundle

In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest eZPublishBundlesCookbookBundle.

Bundle name [eZPublishBundlesCookbookBundle]: 

The bundle can be generated anywhere. The suggested default directory uses
the standard conventions.

Target directory [.../ezpublish5/src]: 

Determine the format to use for the generated configuration.

Configuration format (yml, xml, php, or annotation) [annotation]: yml

To help you get started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]? yes

  Summary before generation  

You are going to generate a "eZ\Publish\Bundles\CookbookBundle\eZPublishBundlesCookBookBundle" bundle
in ".../ezpublish5/src/" using the "yml" format.

Do you confirm generation [yes]? yes

  Bundle generation  

Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]? yes  
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]? yes
Importing the bundle routing resource: OK

  You can now start using the generated code!  




Add a Command directory to the bundle

cd <ezpublish installation root>/eZ/Publish/Bundle/CookbookBundle

mkdir Command

add the following class file CookbookCommand.php in the directory Command


Code Block
titlemy first command
 * File containing the CookbookCommand class.
 * @copyright Copyright (C) 2012 eZ Systems AS. All rights reserved.
 * @license GNU General Public License v2
 * @version //autogentag//
namespace eZ\Publish\Bundle\CookbookBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;

class CookbookCommand extends ContainerAwareCommand
    protected function configure()
		// define a new app console command 'cookbook:run'  $thiswhich takes one argument mapped to contentId
		 $this->setName( 'cookbook:run' )
                       new InputArgument( 'contentId', InputArgument::REQUIRED, 'An existing content id' )

    protected function execute( InputInterface $input, OutputInterface $output )
	    // fetch the command $contentId line argument
	    $contentId = $input->getArgument( 'contentId' );

         /**/ @varget $repository \eZ\Publish\API\Repository\Repository */
 the repository from DI container
        $repository = $this->getContainer()->get( 'ezpublish.api.repository' );
        // get the content service from the repository
        $contentService = $repository->getContentService();
             // call loadContentInfo and print out
             print_r( $contentService->loadContentInfo( $contentId ) );
        catch( \eZ\Publish\API\Repository\Exceptions\NotFoundException $e )
            $output->writeln( "No content with id $contentId" );


run f.e.

run php app/console cookbook:runrun  57

Receipt 2 - Creating a content type group and a simple content type