1. 29 Jun, 2012 1 commit
  2. 28 Jun, 2012 2 commits
    • Fabien Potencier's avatar
    • Fabien Potencier's avatar
      merged branch spantaleev/avoid-swiftmailer-init (PR #396) · ef9398de
      Fabien Potencier authored
      Commits
      -------
      
      32ca5b51 Do not care about `mailer` service changes
      efd3757d Avoid Swift Mailer initialization if possible
      
      Discussion
      ----------
      
      Avoid Swift Mailer initialization if possible
      
      The finish() filter flushing spool messages after each request
      caused Swift Mailer to be initialized and all services in this
      provider to be instantiated.
      
      Doing all this work takes time and is potentially unnecessary,
      since only a small number of all requests queue messages for sending.
      
      The time it takes to initialize swiftmailer and all services is between
      1 and 2ms on the 2 machines I tested on.
      This seems like a big price to pay for just including a provider
      that does nothing for most requests.
      ef9398de
  3. 27 Jun, 2012 2 commits
  4. 26 Jun, 2012 4 commits
  5. 25 Jun, 2012 10 commits
  6. 23 Jun, 2012 7 commits
  7. 22 Jun, 2012 7 commits
  8. 19 Jun, 2012 7 commits
    • Dave Marshall's avatar
    • Fabien Potencier's avatar
      merged branch romainneutron/Documentation (PR #383) · 8150e2ca
      Fabien Potencier authored
      Commits
      -------
      
      47769119 Update ControllerProvider example to use the controllers factory
      
      Discussion
      ----------
      
      Update ControllerProvider example to use the controllers factory
      8150e2ca
    • Romain Neutron's avatar
    • Fabien Potencier's avatar
      merged branch fabpot/php54 (PR #378) · 3be840d4
      Fabien Potencier authored
      Commits
      -------
      
      63e660fa added more docs
      acf60818 added some unit tests
      72ac7c5a merged the render and stream method of TwigTrait
      a439ae7f added traits for the routes
      3266c735 added application traits for PHP 5.4
      
      Discussion
      ----------
      
      PHP 5.4 support
      
      This is a first attempt to provide useful shortcut methods on the Application class via traits. It also contains a `secure` method for routes.
      
      Here is how you can make use of these features on PHP 5.4:
      
          use Silex\Application;
          use Silex\Route;
      
          class MyApp extends Application
          {
              use Application\TwigTrait;
              use Application\SecurityTrait;
              use Application\FormTrait;
              use Application\UrlGeneratorTrait;
              use Application\SwiftmailerTrait;
              use Application\MonologTrait;
              use Application\TranslationTrait;
          }
      
          class MyRoute extends Route
          {
              use Route\SecurityTrait;
          }
      
          $app = new MyApp();
          $app['route_factory'] = function () use ($app) {
              return new MyRoute();
          };
      
      This PR depends on #376.
      
      And here is a sample controller using the traits:
      
          $app->get('/{name}', function(Application $app, Request $request, $name) {
      
              $app->mail(\Swift_Message::newInstance()
                  ->setSubject('[YourSite] Feedback')
                  ->setFrom(array('noreply@yoursite.com'))
                  ->setTo(array('feedback@yoursite.com'))
                  ->setBody($request->get('message')));
      
              $app->log('Foo Bar');
      
              return $app->render('hello', [
                  'name' => $name,
                  'url'  => $app->url('home', ['name' => 'Fabien']),
                  'user' => $app->user(),
              ]);
          })
          ->bind('home')
          ->assert('name', '\w+')
          ->secure('ROLE_ADMIN') // <- method defined in Route\SecurityTrait
          ;
      
      As you can see, it makes things much more readable and easier to understand. And of course, it makes Silex very flexible as you can add any method on Application and Route. You just need to define a trait and register it on your custom Application or Route.
      
      ---------------------------------------------------------------------------
      
      by fabpot at 2012-06-17T15:32:15Z
      
      Another option to avoid having to override the route factory is to define a parameter for the route class:
      
          $app['route_class'] = 'MyRoute';
      
      Most of the time this should be sufficient.
      
      ---------------------------------------------------------------------------
      
      by fzaninotto at 2012-06-17T16:56:59Z
      
      VERY readable. This change makes Silex even better. Great idea!
      
      ---------------------------------------------------------------------------
      
      by mrmark at 2012-06-18T17:42:57Z
      
      This is really awesome!  Really shows off the power of traits.
      
      I was trying out Silex a while ago, and I wanted to try to extend the Silex\Application class, but this sort of broke down at the [Silex\ControllerProviderInterface](https://github.com/fabpot/Silex/blob/master/src/Silex/ControllerProviderInterface.php#L28) because it expects the Silex\Application class.  This means that IDE's and the like wouldn't know about any new methods in my new class.  This is probably more important now with this PR because the IDE wouldn't know about any of the traits used.
      
      ---------------------------------------------------------------------------
      
      by stof at 2012-06-18T17:46:55Z
      
      @mrmark There is nothing we can do for it. We cannot document the doc by mentioning your own application class. It would be wrong as the silex application class is valid, and it would be impossible as your own application class is not part of silex.
      
      ---------------------------------------------------------------------------
      
      by mrmark at 2012-06-18T18:17:20Z
      
      @stof Sorry, I wasn't suggesting that Silex be modified to accommodate my application class specifically.  I'm not actually sure of the solution here, perhaps change the interface to look like so:
      
          public function connect($app);
      
      And then depend upon the PHPDoc to tell the IDE what $app really is?  In the end, it would be nice if we knew what $app really was so we would know what methods and the like are available.
      
      ---------------------------------------------------------------------------
      
      by stof at 2012-06-18T18:19:20Z
      
      @mrmark the issue is the same: the phpdoc is still in the Silex code. And removing typehints just because inheritance is allowed is wrong IMO
      
      ---------------------------------------------------------------------------
      
      by fabpot at 2012-06-19T07:51:38Z
      
      I've just added a bunch of unit tests for the new traits. Any other thoughts before I merge?
      
      ---------------------------------------------------------------------------
      
      by GromNaN at 2012-06-19T08:05:22Z
      
      Trait tests should be skipped for PHP < 5.4
      
      ---------------------------------------------------------------------------
      
      by fabpot at 2012-06-19T08:07:38Z
      
      @GromNaN That's already the case.
      
      ---------------------------------------------------------------------------
      
      by igorw at 2012-06-19T11:17:26Z
      
      👍 Ship it!
      3be840d4
    • Fabien Potencier's avatar
      added more docs · 63e660fa
      Fabien Potencier authored
      63e660fa
    • Fabien Potencier's avatar
      added some unit tests · acf60818
      Fabien Potencier authored
      acf60818
    • Fabien Potencier's avatar
      72ac7c5a