3

タイトルにあるように、CakePHP 2のAclチュートリアルに問題があります。チュートリアルに記載されているとおりにすべてを実行しましたが、それでも機能しません。

インターネット上にもこのチュートリアルで問題を抱えている人がたくさんいることは知っていますが、私のような同じ問題を抱えているブログエントリなどは見つかりません。アプリの方向にアクセスしようとすると、次のエラーが発生します。

Notice (8): Undefined index: group_id [APP\Model\User.php, line 98]

と:

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => Group [Aro0.foreign_key] => ) "

したがって、Aclに送信されるforeign_keyの値はまったくありません。しかし、奇妙なことに、少なくともuserscontrollerの機能では、foreign_keyは適切に設定されていますが、Aclに渡す必要がある場合は失われます。

Nr  Query   Error   Affected    Num. rows   Took (ms)

1   SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4
2   SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4
3   SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4
4   UPDATE `cake`.`users` SET `modified` = '2012-11-13 19:59:47' WHERE `cake`.`users`.`id` = '4'
5   SELECT `User`.`group_id` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4 LIMIT 1
6   SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'Group' AND `Aro0`.`foreign_key` = 2 ORDER BY `Aro`.`lft` DESC
7   SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'User' AND `Aro0`.`foreign_key` = 4 ORDER BY `Aro`.`lft` DESC
8   SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6
9   SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6
10  SELECT `Aro`.`parent_id` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6 LIMIT 1
11  SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`lft`, `Aro`.`rght` FROM `cake`.`aros` AS `Aro` WHERE 1 = 1 AND `Aro`.`id` = 6 LIMIT 1
12  SELECT `Aro`.`id`, `Aro`.`lft`, `Aro`.`rght` FROM `cake`.`aros` AS `Aro` WHERE 1 = 1 AND `Aro`.`id` = 2 LIMIT 1
13  SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6
14  UPDATE `cake`.`aros` SET `parent_id` = 2, `model` = 'User', `foreign_key` = 4, `id` = 6 WHERE `cake`.`aros`.`id` = '6'
15  SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'Group' AND `Aro0`.`foreign_key` IS NULL ORDER BY `Aro`.`lft` DESC

エラーメッセージの行は次のとおりです。

public function bindNode($user) {
    return array('model'=>'Group','foreign_key'=>$user['User']['group_id']);
}

では、なぜforeign_keyの値が最初に「2」(どのようになっているはずか)で、その後NULLになるのでしょうか。

何人かが私を助けてくれることを願っています。ありがとう。

PS:私の質問のドイツ語版を好むすべての人のために、ここにあります

更新: これにより、userscontrollerのすべての機能で機能させることができました:

public function bindNode() {
    $this->id;
    $data = $this->read();
    return array('model' => 'Group', 'foreign_key' => $data['User']['group_id']);
    }

しかし、他のすべてのコントローラーについても同じです。他のコントローラーでも機能するように、モデル内のユーザーデータを取得する方法を知っている人はいますか?

4

1 に答える 1

4

自分の質問に答えるのは少しばかげていることは知っていますが、インターネット上では答えがないように見えるので、同じ問題を抱えている人のために質問を削除するのではなく、ここに残しておく方がよいと思います。

次のコードで問題を解決できました。

public function bindNode() {
    $data = AuthComponent::user();
    return array('model' => 'Group', 'foreign_key' => $data['User']['group_id']);
    }

それは完璧に機能しているようで、多分それは他の人を助けるかもしれません;)

于 2012-11-19T19:15:15.833 に答える