php - 2.0Beta 中的 Cake PHP 路由问题

标签 php cakephp cakephp-routing

我正在将一个开发站点升级到 Cake 2.0 Beta,但我的自定义路由似乎已损坏。之前的站点将 url/login 路由到 Employees Controller action:login。这是设置路线的代码:

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

当 Cake 找不到页面的 Controller 时,我反而得到了标准错误:

Error: LoginController could not be found.

意味着它根本没有被路由; LoginController 不应该被调用也不存在。我已经确认 EmployeesController 中的登录功能甚至从未启动过。该页面应路由到生成员工登录 View 的 EmployeesController login() 函数。

我是否错过了 Cake 处理路由的方式的变化?有什么可能是这里的问题吗?

更新:

我知道顺序对路由很重要,所以这里是 app/config/routes.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 的函数,它将用户重定向到实际的/login 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 语句。

更新: routes.php 中的路由顺序似乎是问题的一部分;我将/login 的路线更改为 require CAKE 之上。 “配置”。 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';

我已经确认现在 EmployeesController.php 中的“login”操作现在正在执行,所以他们的路由是在那个程度上正确完成的。 但是我现在收到以下错误:

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) 进行连接,此路由更改是否会破坏到数据库插件的路由?如果这是一个不同的问题,我可以创建一个单独的问题,因为如果上述修复与丢失的数据源无关,则原始问题已解决。

最佳答案

我正在将 CakePHP 应用程序升级到 2.1.1,但遇到了同样的问题。 配置 database.php 设置的方式已更改。你需要 像这样指向正确的数据源....

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

“驱动程序”已从“驱动程序”更改为“数据源”。希望对您有所帮助

关于php - 2.0Beta 中的 Cake PHP 路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000739/

相关文章:

javascript - jQuery AJAX 分页不起作用

php - CakePHP 基本身份验证和 jQuery

php - CakePHP 2.4 redirect() 与 POST 数据?

php - cakephp:seo 友好的 url 路由 - 避免传递 url 参数

php - CORS 预检 channel 未成功。仅在 Firefox 中。 Chrome 工作正常

java - 如何使用 PHP 的参数实例化/调用 java 类?

php - 如何在不使用插件的情况下创建搜索框?

php - 我可以将 Facebook 的 hiphop 与 Zend Framework、cakephp、symfony 等框架一起使用吗

php - Symfony2 开发环境工作,生产环境给出 404 错误