Symfony: SensioLabs Connect & Bundles - symfony

I'm starting with Symfony3 and I have two beginner questions:
Is there a good repository for Symfony Bundles? I found some, but they all lack a category system. Is this a downsite for Symfony, that you have to scan all bundles in their sourcecode?? The names and supershort descriptions tell you almost nothing about the bundles...
I've tried to join the https://connect.sensiolabs.com community but somehow I don't see anything. I just can edit my profile. It says "profile completion: 50%" and asks me for some more accounts on Github etc. (which I don't have). Am I missing something? I thought there will be a nice board etc.

http://knpbundles.com/ contains thousands of bundles to use. Also https://github.com/FriendsOfSymfony have awesome bundles.
Usually whenever you want to do a feature you'll google bundles that support this feature. Hence the name gets relevant.

Related

Migration from Propel to Propel2

I want to migrate a Symfony2 project (v.2.7.1) from Propel1.7 to Propel2 (currently "alpha 5").
I'm using various Propel behaviors and third party bundles which relies on "Propel" adaptators to correctly work. It will be very helpful for me to have your comments for each behavior / bundle to know if it's trivial to migrate or if difficulties (and which!) could happen...
Behaviors:
Archivable
NestedSet
Sluggable
QueryCache
Timestampable
Typehintable (willdurand/propel-typehintable-behavior)
Equalnest (craftyshadow/propel-equalnest-behavior)
Geocodable (willdurand/geocoder-bundle)
Third party bundles:
FOSUserBundle
GlorpenPropelBundle
FOSElasticaBundle
Core behaviors
Theses behaviors are still in Propel2
Archivable
NestedSet
Sluggable
QueryCache
Timestampable
Third-party behaviors
Equalnest
The author does not seem confident in the compatibility like explained in this issue. I'll create a specific issue #969 to know the state of the art for managing an "equal nest" in Propel2.
Geocodable
A PR has been done here, but no news for a long time...
There is now a dedicated repo for Propel2.
Core source
The typehintable is in the core of Propel2, so it smells good
Third-party bundles
FOSUserBundle
Propel2 integration is related to that issue; as the typehintable behavior is now in the Propel core, I suppose we have to change the schema.xml supplied by default by FOSUserBundle for Propel.
GlorpenPropelBundle
It seems not compatible for the moment as explained here, but I suppose it would be better to discuss all the subjects covered in this fantastic bundle in a dedicated issue to know how Propel2 manage these problematics.
FosElasticaBundle
Even for Propel1, this bundle was a little bit hard to use, I suppose we have to work for Propel2.
Full links & discussion on github / https://github.com/propelorm/Propel2/issues/966

sylius or sonata or custom for subscription based application

We are going to build something like cratejoy.com, but don't want spend lot's of time building which is already builded before for developers.
I was going through sonata and sylius, but not sure if we can build subscription based model with one of them. If yes we can, then which would be best to use? or should we just build complete custom solution, because it involve b2b solution.
What we will be building?
Basically e-commerce software like any os-commerce shopping system, but the only difference is, we will be adding subscription on each product.
So let's say, if you order a product, we will ship it to you every month to your door step.
but we are building this as service, so many people can just create their site and start using our tools to start selling there products.
I might be a little biased towards Sylius, as I work with it constantly - I've tried using Sonata bundles in projects before but failed in making use of them.
Reasons for using Sylius are that it's heavily decoupled and customizable, which is exactly what you want if you need an e-commerce solution that is not the conventional "add product to basket, pay for it once" model.
There are two approaches you can take to use Sylius: Either use the full stack application and customize it, which is the most common approach and better supported. The other approach is to install Sylius like a library rather than an application and build the application and frontend yourself, using Sylius classes and services when you need to (which is what I do).
Things to be careful when using Sylius are that it's still in beta, with breaking changes occurring between releases. Also the documentation is very incomplete or outdated (something I plan to help improve), with the exception of Resource and ResourceBundle - these packages are the most important part of Sylius and are therefore very well documented. For your project, I recommend the first option.
For subscriptions, areas of Sylius you want to look at configuring and extending are OrderBundle, PricingBundle and PaymentBundle. If you're very familiar with Symfony, this should be straightforward.

How to publish my symfony2 bundles?

I am trying to find a documentation or a tutorial about creating and publishing symfony2 bundles for other developer use.
I tried to look at some source code for some public bundles but it seems it needs more in dept understanding.
Is there any official documentation about this ?
You can find most of the recommendations from the official symfony documentation : http://symfony.com/doc/master/cookbook/bundles/best_practices.html
I also encourage you to read this slides from the famous #stof70 and #lsmith, that exposes the most recent best practices about bundles (composer, travis, knpbundles, etc) : http://friendsofsymfony.github.com/slides/there_is_a_bundle_for_that.html#1
There is no official documentation on this topic. But from my point of view I can tell you, that most important things for you bundle are:
Uniqueness
README
Tests
Avoiding dependencies
Good practice also is to tag stable releases.
By the way, at KnpBundles you can see the number left to the bundle name. It represents respectability of bundle within community. You can check most respectable and the looser ones, compare and analyze them to define points, that make bundles successful.

Symfony2 and Frontend & Backend Bundles

Couple of month ago I got a legacy project written on Sf2. I fixed some bugs, and added some new functionality, but still i feel that it was made a little bit clumsy. Well, maybe not just a little :) So, I have a number of questions, how things really should be done in Sf2.
The first thing which is bothering me, is that the Application is separated on Frontend and Backend bundles. The're standing on the same model, and for example entity Book can be seen from FrontendBundle and edited from BackendBundle. In some way this is producing a confusion of abstractions. So my question is - is it right, or wrong, and if wrong how it should be done in appropriate way?
Bundles are components in symfony2 that provides a functionality to your app. The frontend and backend approach has changed in symfony2, the bundles are used instead.
For example, you can create a BookBundle, and put all the functionality regarding to books in that bundle, adding, updating etc. And by configuring the routes, you can redirect all the requests about the book to that bundle.
The main point is, the frontend and the backend about the books resides in same bundle, and only in that bundle(with controllers and entities and repositories and views etc.).
This is the intended usage in symfony2.

Symfony2 Backend?

I am new to Symfony, please don't scold me about this question.
I read in a Symfony 1.4 book that there is a functionality of adding backends to your applications via doctrine:generate-admin or generate:app backend, implementing CRUD operations.
Now I wonder, is there anything similiar with Symfony2.0?
Basically I have an user management and a database in the background that I would love to have available for my Admin Users, but do I have to code it myself (i.e. securing the are /admin, creating templates, classes, methods etc. that fulfill this tasks) or can it be done more easy by using some kind of an already existing backend functionality?
Thanks!
EDIT: Also read there's a plugin called "Apostophe" - but isn't there anything included with SF2 or are there any preconfigured SF2 Versions that already come with Backend solutions?
There's the SonataAdminBundle (and possibly a few more I haven't seen) that helps provide an admin system, however this area is still being worked on heavily by the Symfony2 community.
Lukas has put together a blog article on the current state of development of a Symfony2 CMF, with some rough timescales - State of the Symfony2 CMF
Hope this helps!
Also there is another bundle for managing the admin. You can take a look here http://knpbundles.com/cedriclombardot/AdmingeneratorGeneratorBundle
For "admin generation", Symfony2 is not yet with the code generation on that aspect. The base is VERY STRONG. Remember Symfony2 is still at 2.0 stage. (Not 2.1++ like symfony1).
If you want cut and paste code. Symfony2 is not exactly for that.
DISCLAIMER
I am more specialized in frontend than backend, but I got around stuff. But Thanks to Symfony2. I can be on both sides. So I speak from this context.
CAVEATS
What I call "good stuff".
Only using ONE {{ form_widget(form) }} that Symfony form documentation recommends ... and not explictly cut and pasting from the Twig tutorial that is /meant/ to show how to do theme... not to implement like it is shown.
Thinnest controller methods possible
... out of scope of this post.
SO
My best advice is serious RTFM, a few times, with Symfony books. It is scary, but I am working with it since three months and re-reading a lot. Everytime I get excited with gems.
ANSWER IN QUESTION
My current choice of bundles is:
FR3DLdapBundle, with FOSUserBundle
MopaBootstrapBundle along with all code generated with HTML/CSS structure Twitter Bootstrap gives. (if you haven't heard of it, yet, where were you?)
AsseticBundle with proper {%- javascript %} inclusion
And the rest is contextual.
My READ and RE-Read list
A hidden gem and very helpful blog posts were for me from:
Problematic's blog post series "On a diet"
Matthias Noback
Liip Symfony2 tagged blog posts, but mostly the Table Inheritance topic
and CraftItOnline
For the sake of completeness there is a native way to generate CRUDs:
php app/console doctrine:generate:crud
This command will ask to you some information, like the entity, if you want a write action, the configuration format or the base route prefix.
In my opinion this is the fastest and light way to quickly generate a controller to create, read, update or delete your entities, so it is good on simple projects or to code a basic CRUD inside a little Bundle.
Official documentation: http://symfony.com/doc/master/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

Resources