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

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

ただいまの
回答率

88.59%

newしているがクラスが見つからない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 416

aushijima

score 53

[実現したいこと]

初期表示では、エラーが出ませんが、ajaxで送信した後に下記のようなエラーが出るので解消したいです。

[起こっているエラー]

Fatal error: Uncaught Error: Class 'DirectChat' not found in /var/www/html/xxxxx.xyz/xxx-groupwork_ushijima/library/Api/chatDirect.php:10 Stack trace: #0 {main} thrown in /var/www/html/xxxxx.xyz/xxx-groupwork_ushijima/library/Api/chatDirect.php on line 10

<?php
// library直下のlibrary.phpを読み込むように設定する
require_once(preg_replace('/Api[\\/\\\]chatDirect.php/','',__FILE__).'library.php');
$chat = new Chat;
//データベースとの接続
$con = new Db;
//ログインユーザーの表示
$account = new Account;
//ダイレクトチャット用のオブジェクトを作成する
$direct_chat = new DirectChat;
// //やり取りしている内容を全件取得する
$direct_chat_comments = $chat->getAllDirectChatExchange($group_chat_no);

//ダイレクトチャット画面でグループチャット番号で検索をかけるためにグループチャット番号を取得する
$group_chat_no=filter_input(INPUT_POST,"group_chat_no");
$direct_chat_create=filter_input(INPUT_POST,"direct_chat_create");
$GROUP_CHAT_EXCHANGE_COMMENT_TEXT=filter_input(INPUT_POST,"GROUP_CHAT_EXCHANGE_COMMENT_TEXT");
##########################################
// ダイレクトチャットで必要になる機能
// 送信ボタンを押した時に投稿内容が登録される
// 空で送信ボタンを押すと登録の処理が行われない
// 自分で作成した投稿に関しては、削除することが可能
// 投稿内容に関していいね、お気に入り登録、返信などをすることができる。(自分の投稿や相手の投稿に関わらず、つけれる)
##########################################

if(!is_null($direct_chat_create)){
  //ボタンが押された時の処理
  if(!is_null($GROUP_CHAT_EXCHANGE_COMMENT_TEXT) and $GROUP_CHAT_EXCHANGE_COMMENT_TEXT!==""){
    //データを登録した時に新たにダイレクトチャットのリストを表示する
    $chat->setDirectChatExchange($group_chat_no,$GROUP_CHAT_EXCHANGE_COMMENT_TEXT,$reply_to_dairect_chat_comment_no);
    $direct_chat->commnet_list($direct_chat_comments);
  }else{
    //コメントが入力されていなければ何も処理されない
  }
}else{
  //初期表示でやり取りしていなかったら表示しない。
  $direct_chat->commnet_list($direct_chat_comments);
}

//コメント削除の時
if(!empty($_POST['delete_board_comment'])){
    $chat->deleteBoardComment($_POST['BOARD_COMMENT_NO']);
}


?>

<?php
//2018/08/15
/**
* Class DirectChat
*
*ダイレクトチャットの表示などのクラス
*
*/
class DirectChat extends Db
{

  public function commnet_list($direct_chat_comments){
    //データベースとの接続
    $con = new Db;
    //ログインユーザーの表示
    $account = new Account;
    //登録した内容でダイレクトチャット一覧を出力
    foreach($direct_chat_comments as $direct_comment) {
      echo '<div class="chatRoomCommentBlock">'
          .'<div class="createMemberIcon">'
          .'<img src="" class="icon" />'
          // 自分の名前が表示される
          .'<div class="name">'
          .'<div class="name">'
          // .'<a href="/mpConfiguration/profile/view" class="profileLb iconLink" id="profile_1:884608" title="'.$con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name'].'">'
          .'<span class="name">'
          .$con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name']
          .'</span>'
          .'</a>'
          .'</div>'
          .'</div>'
          .'<div class="commentItemList">'
          .'<div data-id="17601719" data-number="28" data-createDateInLong="1528346837000" class="commentItem  ">'
          .'<div class="commentContents ">'
          .'<div class="commentBody selfclear">'
          .'<div class="commentBodyLeft">'
          .'<div class="formatContents">'
      ;
      //コメントが入る場所。サイボウズでは、pタグは入らないみたいです。
      echo $direct_comment['DIRECT_CHAT_EXCHANGE_COMMENT_TEXT']
          .'</div>'
          .'</div>'
      ;
      //自分で投稿した投稿の時は、下記が表示される
      if($account->chkUpdatePermission($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'],null)){
        echo '<div class="commentBodyRight">'
          .'<div class="commentDelete operation hiddenOperation" style="display:none">'
          .'<a href="#deleteComment_fid=17601719" class="iconLink delete" title="削除する">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/delete_white14.png" class="icon" alt="削除する" />'
          .'</a>'
          .'</div>'
          .'</div>'
        ;
      }
      //この内部にhtmlデータや画像がある時やcsvデータがある時などの設定や吐き出すhtmlなどを指定してあげる。
      echo '</div>'
          .'<div class="commentFooter operationParts selfclear">'
          .'<div class="operation">'
          .'<a href="javascript:void(0);" data-url="/tip/commentUrl?url=https%3A%2F%2Fcybozulive.com%2FmpChat%2Fview%3FchatRoomId%3D2%253A15547680%26fid%3D17601719" class="commentUrlTip" title="固定リンク">'
          .'<span>No.</span>'
          // 表示番号を出力する
          .'<span class="number">'.$direct_comment['DIRECT_CHAT_EXCHANGE_DISPLAY_NO'].'</span>'
          .'<span class="createDate">'.$direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS'].'</span>'
          .'</a>'
        ;
      //いいねと件数を表示する
      echo '<span class="good">'
          .'<span data-url="/common/good/goodAjax" data-mode="SIMPLE" data-use-comet="TRUE">'
          .'<a href="javascript:void(0);" class="iconLink goodLinkOn" id="cbaGood-MP_CHAT-2:15547680-17601719-on" data-url="/comet/common/good/goodTurnJsonDirect">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/good14.png" alt="" class="icon" />'
          .'<span>いいね!</span>'
          .'</a>'
          .'</span>'
          .'<span class="goodMemberCountParts" data-url="/common/good/goodMemberListAjax" style="display:none">'
          .'<a href="javascript:void(0);" class="goodMemberCount goodMemberListTip" data-url="/common/good/goodMemberListTip?application=MP_CHAT&amp;targetId=2%3A15547680&amp;subTargetId=17601719">'
          .date('Y年m月d日 H時i分s秒', strtotime($direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS']))
          .'</a>'
          .'<span>件</span>'
          .'</span>'
          .'</span>'
        ;
      //返信とお気に入りボタンなどを表示
      echo '<a href="javascript:void(0);" id="chatRoomComment_28" class="replyChatRoomComment iconLink">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/reply14.png" alt="" class="icon" />'
          .'<span>返信</span>'
          .'</a>'
          .'<a href="javascript:void(0);" data-url="/common/star/starTurnJsonDirect" id="cbaStar-MP_CHAT--2:15547680-17601719" class="star iconLink" data-displayLabel="true">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/star_off14.png" class="icon" alt="お気に入りに登録する" data-star="off" />'
          .'<span class="starLabel">お気に入り</span>'
          .'</a>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
        ;


      // echo $con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name']
      //     .' '.date('Y年m月d日 H時i分s秒', strtotime($direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS']))
      //     .'</p>'
      //     .'<p id="comment_text">'
      //     //返信した時の返信に関するリンクをつける
      //     .$reply_link
      //     .$direct_comment['DIRECT_CHAT_EXCHANGE_COMMENT_TEXT']
      //     .'</p>'
      //     .'<a href="#reply_to" id="reply_comment" class="reply_to_'.$direct_comment['DIRECT_CHAT_EXCHANGE_DISPLAY_NO'].'" >返信する</a>'
      // ;
      //ログインユーザーに更新権限がある場合、削除ボタンの表示
      if($account->chkUpdatePermission($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'],null)){
        echo '<a href="#delete" id="delete_board_comment" class="delete_comment_'.$direct_comment['DIRECT_CHAT_EXCHANGE_NO'].'" >削除する</a>'
        ;
      }
    }
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

check解決した方法

0

記述の順番を変更したら、エラーは出なくなりました。

<?php
require_once(dirname(__FILE__).'../../library.php');

//2018/08/15
/**
* Class DirectChat
*
*ダイレクトチャットの表示などのクラス
*
*/
class ChatDirect extends Db
{

  public function commnet_list($chat_direct_comments){
    //データベースとの接続
    $con = new Db;
    //ログインユーザーの表示
    $account = new Account;
    //登録した内容でダイレクトチャット一覧を出力
    foreach($chat_direct_comments as $direct_comment) {
      echo '<div class="chatRoomCommentBlock">'
          .'<div class="createMemberIcon">'
          .'<img src="" class="icon" />'
          // 自分の名前が表示される
          .'<div class="name">'
          .'<div class="name">'
          // .'<a href="/mpConfiguration/profile/view" class="profileLb iconLink" id="profile_1:884608" title="'.$con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name'].'">'
          .'<span class="name">'
          .$con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name']
          .'</span>'
          .'</a>'
          .'</div>'
          .'</div>'
          .'<div class="commentItemList">'
          .'<div data-id="17601719" data-number="28" data-createDateInLong="1528346837000" class="commentItem  ">'
          .'<div class="commentContents ">'
          .'<div class="commentBody selfclear">'
          .'<div class="commentBodyLeft">'
          .'<div class="formatContents">'
      ;
      //コメントが入る場所。サイボウズでは、pタグは入らないみたいです。
      echo $direct_comment['DIRECT_CHAT_EXCHANGE_COMMENT_TEXT']
          .'</div>'
          .'</div>'
      ;
      //自分で投稿した投稿の時は、下記が表示される
      if($account->chkUpdatePermission($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'],null)){
        echo '<div class="commentBodyRight">'
          .'<div class="commentDelete operation hiddenOperation" style="display:none">'
          .'<a href="#deleteComment_fid=17601719" class="iconLink delete" title="削除する">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/delete_white14.png" class="icon" alt="削除する" />'
          .'</a>'
          .'</div>'
          .'</div>'
        ;
      }
      //この内部にhtmlデータや画像がある時やcsvデータがある時などの設定や吐き出すhtmlなどを指定してあげる。
      echo '</div>'
          .'<div class="commentFooter operationParts selfclear">'
          .'<div class="operation">'
          .'<a href="javascript:void(0);" data-url="/tip/commentUrl?url=https%3A%2F%2Fcybozulive.com%2FmpChat%2Fview%3FchatRoomId%3D2%253A15547680%26fid%3D17601719" class="commentUrlTip" title="固定リンク">'
          .'<span>No.</span>'
          // 表示番号を出力する
          .'<span class="number">'.$direct_comment['DIRECT_CHAT_EXCHANGE_DISPLAY_NO'].'</span>'
          .'<span class="createDate">'.$direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS'].'</span>'
          .'</a>'
        ;
      //いいねと件数を表示する
      echo '<span class="good">'
          .'<span data-url="/common/good/goodAjax" data-mode="SIMPLE" data-use-comet="TRUE">'
          .'<a href="javascript:void(0);" class="iconLink goodLinkOn" id="cbaGood-MP_CHAT-2:15547680-17601719-on" data-url="/comet/common/good/goodTurnJsonDirect">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/good14.png" alt="" class="icon" />'
          .'<span>いいね!</span>'
          .'</a>'
          .'</span>'
          .'<span class="goodMemberCountParts" data-url="/common/good/goodMemberListAjax" style="display:none">'
          .'<a href="javascript:void(0);" class="goodMemberCount goodMemberListTip" data-url="/common/good/goodMemberListTip?application=MP_CHAT&amp;targetId=2%3A15547680&amp;subTargetId=17601719">'
          .date('Y年m月d日 H時i分s秒', strtotime($direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS']))
          .'</a>'
          .'<span>件</span>'
          .'</span>'
          .'</span>'
        ;
      //返信とお気に入りボタンなどを表示
      echo '<a href="javascript:void(0);" id="chatRoomComment_28" class="replyChatRoomComment iconLink">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/reply14.png" alt="" class="icon" />'
          .'<span>返信</span>'
          .'</a>'
          .'<a href="javascript:void(0);" data-url="/common/star/starTurnJsonDirect" id="cbaStar-MP_CHAT--2:15547680-17601719" class="star iconLink" data-displayLabel="true">'
          .'<img src="https://cybozulive.com/static/49f5cdb4ca/images/star_off14.png" class="icon" alt="お気に入りに登録する" data-star="off" />'
          .'<span class="starLabel">お気に入り</span>'
          .'</a>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
          .'</div>'
        ;


      // echo $con->selectNo($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'])['member_name']
      //     .' '.date('Y年m月d日 H時i分s秒', strtotime($direct_comment['DIRECT_CHAT_EXCHANGE_INS_TS']))
      //     .'</p>'
      //     .'<p id="comment_text">'
      //     //返信した時の返信に関するリンクをつける
      //     .$reply_link
      //     .$direct_comment['DIRECT_CHAT_EXCHANGE_COMMENT_TEXT']
      //     .'</p>'
      //     .'<a href="#reply_to" id="reply_comment" class="reply_to_'.$direct_comment['DIRECT_CHAT_EXCHANGE_DISPLAY_NO'].'" >返信する</a>'
      // ;
      //ログインユーザーに更新権限がある場合、削除ボタンの表示
      if($account->chkUpdatePermission($direct_comment['DIRECT_CHAT_EXCHANGE_CREATE_MEMBER_NO'],null)){
        echo '<a href="#delete" name="delete_chat_direct_comment" class="delete_comment_'.$direct_comment['DIRECT_CHAT_EXCHANGE_NO'].'" >削除する</a>'
        ;
      }
    }
  }
}
// require_once(LIBRARY.'Api/chatDirect.php');
$chat = new Chat;
//データベースとの接続
$con = new Db;
//ログインユーザーの表示
$account = new Account;
//ダイレクトチャット用のオブジェクトを作成する
$chat_direct = new ChatDirect;

//ダイレクトチャット画面でグループチャット番号で検索をかけるためにグループチャット番号を取得する
$group_chat_no=filter_input(INPUT_POST,"group_chat_no");
// //やり取りしている内容を全件取得する
$chat_direct_comments = $chat->getAllDirectChatExchange($group_chat_no);
$chat_direct_create=filter_input(INPUT_POST,"direct_chat_create");
$GROUP_CHAT_EXCHANGE_COMMENT_TEXT=filter_input(INPUT_POST,"GROUP_CHAT_EXCHANGE_COMMENT_TEXT");
##########################################
// ダイレクトチャットで必要になる機能
// 送信ボタンを押した時に投稿内容が登録される
// 空で送信ボタンを押すと登録の処理が行われない
// 自分で作成した投稿に関しては、削除することが可能
// 投稿内容に関していいね、お気に入り登録、返信などをすることができる。(自分の投稿や相手の投稿に関わらず、つけれる)
##########################################

if(!is_null($chat_direct_create)){
  //ボタンが押された時の処理
  if(!is_null($GROUP_CHAT_EXCHANGE_COMMENT_TEXT) and $GROUP_CHAT_EXCHANGE_COMMENT_TEXT!==""){
    //データを登録した時に新たにダイレクトチャットのリストを表示する
    $chat->setDirectChatExchange($group_chat_no,$GROUP_CHAT_EXCHANGE_COMMENT_TEXT,$reply_to_dairect_chat_comment_no);
    //更新した値を取得する
    $chat_direct_comments = $chat->getAllDirectChatExchange($group_chat_no);
    $chat_direct->commnet_list($chat_direct_comments);
  }else{
    //コメントが入力されていなければ何も処理されない
  }
}else{
  //初期表示でやり取りしていなかったら表示しない。
  $chat_direct->commnet_list($chat_direct_comments);
}

//コメント削除の時
if(!empty($_POST['delete_chat_direct_comment'])){
    $chat->deleteDirectChatExchangeNo($_POST['DIRECT_CHAT_EXCHANGE_NO']);
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

require_onceのところでpreg_replace使ってるところを、
小細工をやめて絶対パスで記述したら改善するんじゃないですかね。

個人的には、DirectChatとchatDirectが混在するところが、しっくりこない。
命名ルールしっかり。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/27 15:04

    ありがとうございます。クラス名統一しました。後require_onceの所を
    require_once(dirname(__FILE__).'../../library.php');のように変更しました。ただ、再度送信ボタンを押すとクラスが見つからないエラーになってしまいますね。

    キャンセル

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

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

関連した質問

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