特にデータベースからロールをロードしようとしたときに、Symfony2 セキュリティ システムで問題が発生しました。先に進む前に、私は FOSUserBundle を認識していますが、現時点では、Symfony2 フレームワークをよりよく理解するために、Symfony2 コンポーネントのみを使用してバンドルを機能させたいと考えています。TL;DR -> FOSUserBundle だけを使用するように言わないでください。:-)
私のバンドルには、Accounts、AccountsRoles、および AccountsRepository の 3 つのエンティティが構成されています。
src\RedK\Core\IndexBundle\Entity\Accounts.php
http://pastebin.com/0VgXvtJp
src\RedK\Core\IndexBundle\Entity\AccountsRoles.php
http://pastebin.com/GiKNnYg3
src\RedK\Core\IndexBundle\Entity\AccountsRepository.php
http://pastebin.com/SVuMVdpN
MySQL demo_template.accounts テーブル
http://pastebin.com/YzmjD9e4
MySQL demo_template.accounts_roles テーブル
http://pastebin.com/Ybwr4f7y
データベースからのユーザー ロールのロードを追加しようとする前は、バンドルのすべての側面 (登録、確認、パスワードのリセット、およびログイン) が正しく機能していました。getRoles() { return array('ROLE_USER') } を介して単にロールを array('ROLE_USER') に設定すると、認証が機能し、ユーザーはサイトに正常にログインしました。
ただし、データベースからロールを統合しようとすると、次のエラーが表示されます。これは、AuthenticationException のインスタンスであると理解しています。
Notice: Undefined index: id in /home/humplebert/Websites/www/template/vendor/doctrine/lib/Doctrine/ORM/Query/SqlWalker.php line 804
スタック トレース
http://pastebin.com/Sr5RvZaY
例外は、AccountsRepository のクエリを変更し
、"->select()" および "->leftJoin()" コンポーネントを削除した場合にのみ生成されます。スタック トレースを見ると、pastebin.com リンクの 16 行目あたりで、BasicEntityPersister の多対多マッピングに関して、あらゆる種類の「クレイジー」な現象が発生しているように見えます。
プレーンな「id」への参照について、エンティティクラスの高低を検索しましたが、何も見つかりません。エンティティの「ID」列の名前を単に「id」に変更すると (つまり、src\RedK\Core\IndexBundle\Entity\Accounts で「AccountsID」を「id」に置き換える)、エラーが発生することに気付きました。離れています(別のエラーに置き換えられます。これについては後で詳しく説明します)。
質問 1)
私のエンティティが「未定義のインデックス: id」エラーを生成しているという露骨な問題がありますか? そうでない場合、Symfony2/Doctrine2 は自動インクリメント列に「id」というラベルを付ける必要がありますか?
いじり続けたので、テーブル ID 列の名前を「id」に変更してみることにしました。したがって、src\RedK\Core\IndexBundle\Accounts は AccountsID を単に「id」に置き換えます。同様に、src\RedK\Core\IndexBundle\AccountsRoles は RolesID を単に「id」に置き換えます。そうすると、「未定義のインデックス: id」エラーがなくなります。ただし、新しいエラーが表示されます: "table or view demo_template.accounts_accountsroles does not exist"
. もちろん存在しません。accounts_accountsroles として定義されたテーブルはありません。accounts と accounts_roles という 2 つのテーブルがあります。
質問 2)
データベースからユーザーロールをインポートするために Symfony2/Doctrine2 ツールを使用するには、テーブルの命名に関してどのような規則がありますか? 私が受け取ったエラーに基づいて、何らかの連結が行われているようです。それとも、単にどこかで注釈を台無しにしてしまったのでしょうか?
どんな助けでも大歓迎です。