2.0Beta中的Cake PHP路由问题

时间:2011-08-09 18:08:34

标签: php cakephp cakephp-routing

我正在将开发站点升级到Cake 2.0 Beta,我的自定义路由似乎已被破坏。上一个站点将url / login路由到Employees控制器,action:login。这是设置路线的代码:

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中的登录功能从未启动过。页面应该路由到EmployeesController login()函数,该函数生成Employees 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'));

还有几条路线,但它们只是漂亮的网址在这种情况下不会被调用。

此外,这是EmployeesController的一个功能,它将用户重定向到实际/登录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 / 我现在需要以不同的方式重定向吗?这个重定向IS将转到正确的URL,但是一旦在那里它没有被路由,尽管路由器是正确的:connect语句。

更新: routes.php中路由的顺序似乎是问题的一部分;我将/ login的路由更改为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 个答案:

答案 0 :(得分:2)

不,正如我之前评论过你的那样,你的路由是可以的。检查我的screencapture。我有Cakephp 2.0 Beta,只是用你的代码测试路由到EmployeesController。也许另一个代码正在破坏路由序列,也许Cakephp 2.0有路由缓存。

ScreenShot

答案 1 :(得分:2)

我正在将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' => ''
);

'driver'已从'driver'更改为'datasource'。我希望有帮助

答案 2 :(得分:0)

最后与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身份验证的登录名和密码。 务必重启服务。编码取决于您是否在驱动程序上定义了此变量,并且它似乎是特定于驱动程序的。希望这有帮助