質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.93%

Error: Cannot declare class FacadeAuthLogicController, because the name is already in use

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,318

vowd1

score 51

前提・実現したいこと

PHP7(CakePHP3)で以下のエラーメッセージが発生しました。他にFacadeAuthLogicControllerというクラスは同一ディレクトリには(Controllerのディレクトリ)には置いてないのですが、どこか文法的な誤りがあるのでしょうか。

お手数ですが、知恵をお貸しください。

cake2だと下記コードで問題なく動作しました。

発生している問題・エラーメッセージ

>エラーメッセージ
Error: Cannot declare class FacadeAuthLogicController, because the name is already in use 
File /var/www/html/app/src/Controller/FacadeAuthLogicController.php 
Line: 5

該当のソースコード

<?php

   require_once('FacadeAuthCheckTable.php');


   Class FacadeAuthLogicController{

           protected $name;
           protected $pass;
           protected $list;
           protected $fact;


          public function __construct(FacadeAuthCheckTable $fact = null) {
                  $this->fact = $fact ? $fact : new FacadeAuthCheckTable();
          }


          public function authCompare($name,$pass){
                  $this->name = $name;
                  $this->pass = $pass;
                  $this->list = $this->fact->getList($this->name,$this->pass);
                  return $this->list;
          }

  }

  

試したこと

namespace hoge;のように適当な名前空間をつけてみましたが、だめなようでした。あと、php7のマニュアルで上記エラーの際はErrorクラスをリネームしなさいというのがあったのですが、そのErrorクラスがどこにあるのかよく分かりませんでした。

php7マニュアル

補足

/app/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.phpの97行目でもエラーがでているようです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

ネームスペースは適当なものにせず、namespace App\Controller;としてください。

あと、一般的には、
Class FacadeAuthLogicController {
ではなく
Class FacadeAuthLogicController extends AppController {
とすると思います。

更に、FacadeAuthCheckTable.phpはrequire_once()で読み込むのではなく、CakePHPの規約に沿って作ったコンポーネントとして読み込むべきかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/22 23:36

    namespace App\Controller;
    use App\Controller\AppController;

    の2行を追加することでエラーがでなくなりました。
    require_onceでも動くようですが、モダンな表現ではないので、
    cakephpの規約を調べてみようと思います。

    ありがとうございました。

    キャンセル

0

FacadeAuthLogicControllerというクラスが、CakePHP2には含まれていなかったが、CakePHP3では含まれているという事だと思います。だから、そのクラスは既に使われている(the name is already in use)というエラーが発生しているのだと思います。

コードのClass FacadeAuthLogicControllerを定義している部分を削除してみてください。
そうすれば、エラーが無くなり、プログラムが動作すると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/20 21:32

    回答ありがとうございます。
    >FacadeAuthLogicControllerというクラスが、CakePHP2には含まれていなかったが、CakePHP3では含まれているという事だと思います。
    この部分なのですが、当然ながらFacadeAuthLogicController.phpというファイルはCakephp3に含まれてはいないので該当しないように思われます。コードのClass FacadeAuthLogicControllerを定義している部分とはどこのことでしょうか。

    予想なのですが、composer.jsonを使ってクラスローディングしないと、cakephp3ではエラーになってしまうのではないかと思い、composer.jsonに

    "autoload": {
    "psr-4": {
    "Controllers\\" : "controllers/",
    "Models\\" : "models/",
    "Models\\Sub\\" : "models/sub/"
    }
    }
    のような記述を追加したのですが、今度はcomposer.phar installで

    No Security.salt placeholder to replace.と怒られてしまいます。/config/app.phpのsecurity.saltを適当な値に変えてみたのですが、うまくいきません。

    cakephpではないドキュメントルートに置いてあるcomposer.jsonでためすとこのエラーは出ないのでcakephp固有の問題には違いないと思うのですが。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る