Торт PHP Routing проблема в 2.0Beta - PullRequest
3 голосов
/ 09 августа 2011

Я обновляю сайт разработчика до бета-версии Cake 2.0, и моя пользовательская маршрутизация нарушена. Предыдущий сайт перенаправил URL / логин на контроллер Employees, действие: логин. Это код настройки маршрутов:

Router::connect('/login', array('controller' => 'employees', 'action' => 'login'));
Router::connect('/login/*', array('controller' => 'employees', 'action' => 'login'));

Вместо этого я получаю стандартную ошибку, когда Cake не может найти контроллер для страницы:

Error: LoginController could not be found.

Это означает, что он вообще не маршрутизируется; LoginController не должен вызываться и не существует. Я подтвердил, что функция входа в EmployeesController никогда даже не запускается. Страница должна быть перенаправлена ​​в функцию login () EmployeesController, которая генерирует представление Login сотрудников.

Я пропустил изменение в том, как Cake обрабатывает маршрутизацию? Есть ли что-нибудь, что может быть проблемой здесь?

Обновление:

Я знаю, что порядок может иметь значение для маршрутов, поэтому вот точный порядок соответствующих операторов маршрутизатора в app / config / rout.php:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

CakePlugin::routes();

require CAKE . 'Config' . DS . 'routes.php';

Router::connect('/', array('controller' => 'pages', 'action' => 'home'));

Router::connect('/login', array('controller' => 'employees', 'action' => 'login'));
Router::connect('/login/*', array('controller' => 'employees', 'action' => 'login'));
Router::connect('/logout', array('controller' => 'employees', 'action' => 'logout'));

Есть еще несколько маршрутов, но все они просто симпатичные URL-адреса, не вызываемые в этой ситуации.

Кроме того, это функция из EmployeesController, которая перенаправляет пользователя на фактический URL / логин URL. Все работает нормально до этого перенаправления:

    function doLogin() {
    $goto = (isset($this->params['url']['url'])) ? $this->params['url']['url'] : '';
    $goto = $goto = str_replace('/','|',$goto);
    $goto = $goto = str_replace(':','~',$goto);
    if (strpos($goto,'|')===0) $goto = substr($goto,1);
    if ($goto) $goto = '/goto:'.$goto;
    $this->redirect('/login/'.$goto);
    die();
}

Материал $goto / str_replace() - это просто создание URL-адреса для перехода после успешного входа пользователя. Это не используется в этой ситуации, мы просто перенаправлены в / login / Нужно ли перенаправить другим способом сейчас? Это перенаправление идет по правильному URL, но когда оно там, оно НЕ маршрутизируется, несмотря на правильный оператор router: connect.

Обновление: Порядок маршрутов в rout.php, кажется, является частью проблемы; Я изменил свой маршрут для / логина, чтобы он был выше require CAKE . 'config' . DS . 'routes.php' как таковой:

Router::connect('/login', array('controller' => 'employees', 'action' => 'login'));
Router::connect('/login/*', array('controller' => 'employees', 'action' => 'login'));
require CAKE . 'Config' . DS . 'routes.php';

Я подтвердил, что теперь выполняется действие login из EmployeesController.php, поэтому их маршрутизация выполняется именно в этой степени. Однако теперь я получаю следующую ошибку:

Notice (8): Undefined index: datasource [CORE\Cake\Model\ConnectionManager.php, line 252]
Errors Missing Datasource Class
Error: Datasource class was not found.

Это вызвано тем, что я маршрутизируюсь до маршрутов Cake по умолчанию? Я использую плагины базы данных Cake по умолчанию (Sqlserver) для соединения, это изменение маршрутизации нарушило маршрутизацию к плагину базы данных? Если это другая проблема, я могу создать отдельный вопрос, потому что, если вышеуказанное исправление не связано с отсутствующим источником данных, исходная проблема будет исправлена.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2012

Я обновляю приложение CakePHP до 2.1.1, и у меня та же проблема. Способ настройки setup.php изменился. Вам нужно указать на правильный источник данных, например, так ...

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '',
    'login' => 'cakeBlog',
    'password' => 'c4k3-rUl3Z',
    'database' => 'cake_blog_tutorial',
    'schema' => '', 
    'prefix' => '',
    'encoding' => ''
);

«Драйвер» изменен с «драйвер» на «источник данных». Я надеюсь, что это помогает

2 голосов
/ 10 августа 2011

Нет, как я уже говорил, ваша маршрутизация в порядке. проверь мой скриншот У меня есть Cakephp 2.0 Beta, просто тестирую ваш код для маршрутизации в EmployeesController. Может быть, другой Код нарушает последовательность маршрутизации, может быть, в Cakephp 2.0 есть кеш для маршрутизации.

ScreenShot

0 голосов
/ 31 декабря 2014

Наконец-то получил соединение с этой последовательностью для sqlserver:

    public $default = array(
    'datasource' => 'Database/Sqlserver',
    'persistent' => true,
    'host' => 'VPR132989\LOCAL',
    //'login' => 'markvTest',
    //'password' => 'Pa55w0rd',
    'database' => 'blogTutorial',
    'schema' => '',
    'flags' => array(),
    //'encoding' => PDO::SQLSRV_ENCODING_UTF8,
);

Я закомментировал логин и пароль для проверки аутентификации Windows.Обязательно перезапустите сервисы.Кодировка зависит от того, определена ли эта переменная в вашем драйвере и кажется, что она зависит от драйвера.Надеюсь, это поможет

...