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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2728閲覧

laravelでチャット機能を実装したい

akito_i

総合スコア3

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/10/03 06:59

#実装したいこと
下記のサイトを参照し、PUSHERを使用してチャット機能を
実装したいと考えております。
https://www.casleyconsulting.co.jp/blog/engineer/5122/

#課題
push.jsを使用するのですが、読み込み時に404エラーが発生してしまいます。
(下記にエラー分記載させていただきます。)
記載されている、push.jsのバージョンが古いため
動作しないのかもと思いましたが、訂正しても同じエラーのままでした。。。

下記に当該部分のコードも記載致しますので、
何が原因でエラーが発生するのかご教授頂けたらと思います。
以上、宜しくお願い致します。

#エラー(ページを読み込んだ時点でコンソールに記載されています。)
GET http://localhost:8888/chat/%E2%80%9Chttps://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js%E2%80%9C net::ERR_ABORTED 404 (Not Found)

GET http://localhost:8888/chat/%E2%80%9Chttps://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.js%E2%80%9D net::ERR_ABORTED 404 (Not Found)

#コード
app.blade.php

<!doctype html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{ config('app.name', 'Laravel') }}</title> <script src="{{ asset('js/app.js') }}" defer></script> <link rel="dns-prefetch" href="//fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet"> <link href="{{ asset('css/view.css') }}" rel="stylesheet"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> --下記が今回追加したコードです---------------------------------------- <script src=“https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js“></script> <script src=“https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.js”></script> -------------------------------------------------------------------- 下記省略

chat.blade.php

@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> </div> </div> {{-- チャットルーム --}} <div id="room"> @foreach($messages as $key => $message) {{-- 送信したメッセージ --}} @if($message->send == \Illuminate\Support\Facades\Auth::id()) <div class="send" style="text-align: right"> <p>{{$message->message}}</p> </div> @endif {{-- 受信したメッセージ --}} @if($message->recieve == \Illuminate\Support\Facades\Auth::id()) <div class="recieve" style="text-align: left"> <p>{{$message->message}}</p> </div> @endif @endforeach </div> <form> <textarea name="message" style="width:100%"></textarea> <button type="button" id="btn_send">送信</button> </form> <input type="hidden" name="send" value="{{$param['send']}}"> <input type="hidden" name="recieve" value="{{$param['recieve']}}"> <input type="hidden" name="login" value="{{\Illuminate\Support\Facades\Auth::id()}}"> </div> @endsection @section('script') <script type="text/javascript"> //ログを有効にする Pusher.logToConsole = true; var pusher = new Pusher('[YOUR-APP-KEY]', { cluster : '[YOUR-CLUSTER]', encrypted: true }); //購読するチャンネルを指定 var pusherChannel = pusher.subscribe('chat'); //イベントを受信したら、下記処理 pusherChannel.bind('chat_event', function(data) { let appendText; let login = $('input[name="login"]').val(); if(data.send === login){ appendText = '<div class="send" style="text-align:right"><p>' + data.message + '</p></div> '; }else if(data.recieve === login){ appendText = '<div class="recieve" style="text-align:left"><p>' + data.message + '</p></div> '; }else{ return false; } // メッセージを表示 $("#room").append(appendText); if(data.recieve === login){ // ブラウザへプッシュ通知 Push.create("新着メッセージ", { body: data.message, timeout: 8000, onClick: function () { window.focus(); this.close(); } }) } }); $.ajaxSetup({ headers : { 'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content'), }}); // メッセージ送信 $('#btn_send').on('click' , function(){ $.ajax({ type : 'POST', url : '/chat/send', data : { message : $('textarea[name="message"]').val(), send : $('input[name="send"]').val(), recieve : $('input[name="recieve"]').val(), } }).done(function(result){ $('textarea[name="message"]').val(''); }).fail(function(result){ }); }); </script> @endsection

ChatController.php

<?php namespace App\Http\Controllers; use App\Mail\SampleNotification; use Illuminate\Http\Request; use App\Events\ChatMessageRecieved; use App\Message; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Mail; class ChatController extends Controller { public function __construct() { } public function index(Request $request , $recieve) { // チャットの画面 $loginId = Auth::id(); $param = [ 'send' => $loginId, 'recieve' => $recieve, ]; // 送信 / 受信のメッセージを取得する $query = Message::where('send' , $loginId)->where('recieve' , $recieve);; $query->orWhere(function($query) use($loginId , $recieve){ $query->where('send' , $recieve); $query->where('recieve' , $loginId); }); $messages = $query->get(); return view('chat' , compact('param' , 'messages')); } /** * メッセージの保存をする */ public function store(Request $request) { // リクエストパラメータ取得 $insertParam = [ 'send' => $request->input('send'), 'recieve' => $request->input('recieve'), 'message' => $request->input('message'), ]; // メッセージデータ保存 try{ Message::insert($insertParam); }catch (\Exception $e){ return false; } // イベント発火 event(new ChatMessageRecieved($request->all())); // メール送信 $mailSendUser = User::where('id' , $request->input('recieve'))->first(); $to = $mailSendUser->email; Mail::to($to)->send(new SampleNotification()); return true; } }

ChatMessageRecieved.php(イベント)

<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class ChatMessageRecieved implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; protected $message; protected $request; /** * Create a new event instance. * * @return void */ public function __construct($request) { $this->request = $request; } /** * イベントをブロードキャストすべき、チャンネルの取得 * * @return Channel|Channel[] */ public function broadcastOn() { return new Channel('chat'); } /** * ブロードキャストするデータを取得 * * @return array */ public function broadcastWith() { return [ 'message' => $this->request['message'], 'send' => $this->request['send'], 'recieve' => $this->request['recieve'], ]; } /** * イベントブロードキャスト名 * * @return string */ public function broadcastAs() { return 'chat_event'; } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

diff

1- <script src=“https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js“></script> 2+ <script src="https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js"></script>

投稿2020/10/03 07:59

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akito_i

2020/10/03 08:32

ダブルコーテーションも大文字と小文字が違うんですね。 勉強になりました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問