Skip to content
Permalink
Browse files

Camelize route prefix when trying to load controller.

Fixes #8134
  • Loading branch information...
ADmad authored and markstory committed Jan 30, 2016
1 parent 2f0bf24 commit 954c6fdbce58c5ef71dd6b0cbb9cdd3036c6d57c
@@ -17,6 +17,7 @@
use Cake\Core\App;
use Cake\Event\Event;
use Cake\Routing\DispatcherFilter;
use Cake\Utility\Inflector;
use ReflectionClass;
/**
@@ -68,7 +69,15 @@ protected function _getController($request, $response)
$controller = $request->params['controller'];
}
if (!empty($request->params['prefix'])) {
$namespace .= '/' . $request->params['prefix'];
if (strpos('/', $request->params['prefix']) === false) {
$namespace .= '/' . Inflector::camelize($request->params['prefix']);
} else {
$prefixes = array_map(
'Cake\Utility\Inflector::camelize',
explode('/', $request->params['prefix'])
);
$namespace .= '/' . implode('/', $prefixes);
}
}
$firstChar = substr($controller, 0, 1);
if (strpos($controller, '\\') !== false ||
@@ -0,0 +1,52 @@
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 3.2.1
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\TestCase\Routing\Filter;
use Cake\Core\Configure;
use Cake\Event\Event;
use Cake\Network\Request;
use Cake\Network\Response;
use Cake\Routing\Filter\ControllerFactoryFilter;
use Cake\TestSuite\TestCase;
/**
* Controller factory filter test.
*/
class ControllerFactoryFilterTest extends TestCase
{
/**
* testBeforeDispatch
*
* @return void
*/
public function testBeforeDispatch()
{
Configure::write('App.namespace', 'TestApp');
$filter = new ControllerFactoryFilter();
$request = new Request();
$response = new Response();
$request->addParams(['prefix' => 'admin', 'controller' => 'Posts', 'action' => 'index']);
$event = new Event(__CLASS__, $this, compact('request', 'response'));
$filter->beforeDispatch($event);
$this->assertEquals(
'TestApp\Controller\Admin\PostsController',
get_class($event->data['controller'])
);
}
}

0 comments on commit 954c6fd

Please sign in to comment.
You can’t perform that action at this time.