3

開発サイトを 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 の login 関数が起動されていないことを確認しました。このページは、Employees Login ビューを生成する 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 であり、この状況では呼び出されません。

さらに、これは、ユーザーを実際の /login URL にリダイレクトする EmployeesController の関数です。このリダイレクトまで、すべてが正常に実行されます。

    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 . '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) を使用していますが、このルーティングの変更により、データベース プラグインへのルーティングが壊れましたか? 別の問題である場合は、別の質問を作成できます。上記の修正が欠落しているデータソースとは無関係である場合、元の問題は修正されているためです。

4

3 に答える 3

3

私は 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' => ''
);

「ドライバー」が「ドライバー」から「データソース」に変更されました。それが役立つことを願っています

于 2012-04-23T13:46:58.167 に答える
2

いいえ、前にコメントしたように、ルーティングは問題ありません。私のスクリーンキャプチャをチェックしてください。私は Cakephp 2.0 Beta を持っています。コードを使用して EmployeesController にルーティングすることをテストしています。別のコードがルーティング シーケンスを破損している可能性があります。おそらく、Cakephp 2.0 にはルーティング用のキャッシュがあります。

スクリーンショット

于 2011-08-10T17:00:28.243 に答える
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認証をテストするために、ログインとパスワードをコメントアウトしました。必ずサービスを再起動してください。エンコーディングは、この変数がドライバーで定義されているかどうかによって異なり、ドライバー固有のようです。お役に立てれば

于 2014-12-30T22:02:50.397 に答える