acanimal
acanimal

Reputation: 5020

Symfony2 where to place custom helper classes

I'm starting with a Symfony2 project. I know the framework basics but I have a question: Where is the right place to pot those helper classes I create for help or for the business logic?

Upvotes: 28

Views: 29944

Answers (6)

Max Małecki
Max Małecki

Reputation: 1702

The best way to keep the business logic is create service to handle all the logic. So it will be in:

src/Foo/BarBundle/Service

and you need to call the service in the services.yml.

Upvotes: 8

Valentin Knyazev
Valentin Knyazev

Reputation: 166

According to official documentation - in particular - Symfony Best Practices - you should store your services in Utils folder under the src. I belive, that this is correct way regardless of whether you want or don't wont to make the functionality provided by services of your bundle available to other parts of application via Service Container. Furthermore, you can store helper classes in any place you consider suitable. Concerning @Adam Knowles and @PachinSV answers - they are not quite right because they do not answer your question - "Where is the right place to pot those helper classes I create for help or for the business logic?" or "Where to store classes which I want to register and use via Service Container" - but not where to put bundle Extension class - which main purpose is to provide information about configuration which should be automatically loaded from your bundle to apps Service Container during the process of booting the Kernel.

Upvotes: 0

PachinSV
PachinSV

Reputation: 3780

What @Adam says is wrong, you have to store your Dependency Injection Extensions in DependecyInjection directory, not the services itself. In the documentation says that you can store your (custom) business logic classes in any place you like.

http://symfony.com/doc/current/best_practices/business-logic.html

Upvotes: 10

user1696638
user1696638

Reputation: 31

I recently did some small work on an existing Symfony2 project. As described by answer from Tuong Le, I created my Helper classes under the Helper directory of the bundle and class name with Helper suffix i.e. the helper class is located at:

src/MyBundle/Helper/MyUtilHelper.php

I can use MyUtilHelper class in my bundle without calling the service container i.e. I didn't need to call.

$container->get('my_util');

I don't really know whether there is some special config. in my setup; someone already got it setup and I was just adding new functionality.

Upvotes: 3

Adam Knowles
Adam Knowles

Reputation: 502

Max's answer is correct. However I question the path he recommends for your code.

The following classes and files have specific emplacements:

Service Container Extensions (belong in) DependencyInjection/

from http://symfony.com/doc/current/cookbook/bundles/best_practices.html

That says your Services should be placed in a folder called 'DependencyInjection', not 'Services'. In full, it should be src/Foo/BarBundle/DependencyInjection

I say this as someone that had the former and has just finished moving them all to the latter (!)

Upvotes: 12

Tuong Le
Tuong Le

Reputation: 19220

You can create the custom classes under your Bundle, such as under a folder Helper/.. However, to use those helper in your code, you'll need to define those Helper(s) in your service description file (such as services.xml)... Then you can use $container->get('your_helper')->

Upvotes: 2

Related Questions