/**
  * Configure the controllers and views.
  *
  * @param string          $directory
  * @param OutputInterface $output
  * 
  * @return $this
  */
 protected function configureMVC($directory, $output)
 {
     File::delete($directory . '/app/controllers/HomeController.php');
     File::delete($directory . '/app/views/hello.php');
     File::copyIfNone(dirname(__FILE__) . '/../stubs/app/controllers/IndexController.stub', $directory . '/app/controllers/IndexController.php');
     File::put($directory . '/app/controllers/BaseController.php', File::get(dirname(__FILE__) . '/../stubs/app/controllers/BaseController.stub'));
     File::copyIfNone(dirname(__FILE__) . '/../stubs/app/views/index/index.blade.stub', $directory . '/app/views/index/index.blade.php');
     File::copyIfNone(dirname(__FILE__) . '/../stubs/app/views/error/index.blade.stub', $directory . '/app/views/error/index.blade.php');
     File::mkdir($directory . '/public/assets/css/controllers');
     File::mkdir($directory . '/public/assets/js/controllers');
     File::copyIfNone(dirname(__FILE__) . '/../stubs/public/assets/css/controllers/index/index.stub', $directory . '/public/assets/css/controllers/index/index.less');
     File::copyIfNone(dirname(__FILE__) . '/../stubs/public/assets/js/controllers/index/index.stub', $directory . '/public/assets/js/controllers/index/index.js');
     File::replace($directory . '/app/routes.php', "Route::get('/', function()\n{\n\treturn View::make('hello');\n});", "Route::get('/', 'IndexController@getIndex');\nRoute::controller('index', 'IndexController');");
     $output->writeln('mvc configured');
     return $this;
 }
 /**
  * Configure response headers in after filter.
  *
  * @param string          $directory
  * @param OutputInterface $output
  * 
  * @return $this
  */
 protected function configureResponseHeaders($directory, $output)
 {
     File::appendOnce($directory . '/app/filters.php', File::get(dirname(__FILE__) . '/../stubs/app/filters.headers.partial'));
     $output->writeln('response headers support added');
     return $this;
 }
 /**
  * Install ACL functionality.
  *
  * @param string          $directory
  * @param OutputInterface $output
  * 
  * @return $this
  */
 protected function installAcl($directory, $output)
 {
     if (!File::has($directory . '/composer.json', 'zendframework/zend-permissions-acl')) {
         $output->writeln('<info>Installing zendframework/zend-permissions-acl...</info>');
         exec('composer require zendframework/zend-permissions-acl:2.2.6', $out);
         echo implode("\n", $out) . "\n";
     }
     File::copyIfNone(dirname(__FILE__) . '/../stubs/app/classes/Acl.stub', $directory . '/app/classes/Acl.php');
     File::copyIfNone(dirname(__FILE__) . '/../stubs/app/config/acl.stub', $directory . '/app/config/acl.php');
     File::appendOnce($directory . '/app/start/global.php', File::get(dirname(__FILE__) . '/../stubs/app/start/global.acl.partial'));
     File::appendOnce($directory . '/app/filters.php', File::get(dirname(__FILE__) . '/../stubs/app/filters.acl.partial'));
     $output->writeln('acl installed');
     return $this;
 }