Choosing the right framework to build an application is one of the most challenging tasks as a CTO. It requires you to have a wide range of experience in managing application development. Many years of experience pays off.
One of the most important questions you have to ask is how conventional your application is going to be, because one of the key concepts that differentiates these frameworks is “convention over configuration” (CoC). For instance, if you are building a blog, your project is obviously very conventional. If so, you would definitely want to choose a CoC framework like Ruby on Rails and CakePHP. A CoC framework will take care of the majority of the work for you; you would only have to manually code the unconventional parts.
But if your app is unconventional (imagine building a system for Uber), you would want to consider other frameworks like Symfony. (Apparently, Symfony was originally designed as a CoC framework but, from 2.0, they moved in the opposite direction.) It is a highly flexible framework that does not make any assumptions about what you want to do or how you want to do them. It basically has no opinions of how you should solve your problems.
This is good and bad. If you are an inexperienced developer who is not aware of the best practices, using such an open-ended framework could spell disastrous because you would likely choose suboptimal or even wrong ways of implementing common features (because you would not know that there are better ways of doing the same things). But if you are an experienced developer who disagrees with the best practices, CoC frameworks would be annoying because they would impose certain ways of doing things that you don't like. For this reason, CoC is a good framework for beginners because they can learn how to do things correctly by using CoC frameworks.
CoC frameworks are also advantageous with respect to the cost of hiring developers. Because CoC enforces certain ways of doing things, you do not need to hire expensive senior developers. You can hire junior developers and you wouldn't have to worry about them messing up your code or solving simple problems in convoluted ways.
The type of business you have also influences the choice. If you are an interactive agency who is building many applications for many different clients, you would be better off using a CoC framework because the majority of them would be conventional, and have a lot in common. You would want the CoC framework to automatically take care of the repetitive aspects for you.
But if you are a startup who is going to be working on the same app for years, you would be better off investing more time up front on “configuration” so that you would have more flexibility later (so that you wouldn't be limited by the conventions that it imposes). However, if you are creating a prototype or MVP to be discarded shortly, you would be better off using a CoC framework since the up-front investment to gain flexibility later would be a waste in that case.