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

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

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

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

PHP

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

Q&A

解決済

1回答

2128閲覧

[PHP・Laravel]コメント機能実装中でのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

PHP

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

0グッド

0クリップ

投稿2021/05/09 07:48

前提・実現したいこと

掲示板アプリを作成しております。
詳細ページにおいてコメントを投稿する機能を実装中なのですが、エラーで躓いて解決できない状況です。
ご教授いただけると幸いです。

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

UnexpectedValueException The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied Monolog\Handler\StreamHandler::write vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:111

該当のソースコード

Web.php(該当箇所のみ記載。)

PHP

1Route::resource('/comments', 'CommentController')->except(['index', 'show'])->middleware('auth');

CommentController.php(storeアクション以外はまだ実装しておりません。)

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use App\Comment; 6use App\Http\Requests\CommentRequest; 7use Illuminate\Http\Request; 8 9class CommentController extends Controller 10{ 11 public function store(CommentRequest $request, Comment $comment) 12 { 13 $comment->fill($request->all()); 14 $comment->user_id = $request->user()->id; 15 $comment->article_id = $request->article()->id; 16 $comment->save(); 17 return redirect()->route('articles.show'); 18 } 19 20 public function edit() 21 { 22 // 23 } 24 25 public function update() 26 { 27 // 28 } 29 30 public function destroy() 31 { 32 // 33 } 34}

Comment.php

PHP

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Database\Eloquent\Relations\BelongsTo; 7 8class Comment extends Model 9{ 10 protected $fillable = [ 11 'body', 12 ]; 13 14 public function user(): BelongsTo 15 { 16 return $this->belongsTo('App\User'); 17 } 18 19 public function article(): BelongsTo 20 { 21 return $this->belongsTo('App\Article'); 22 } 23} 24

〇〇_create_comments_table.php

PHP

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateCommentsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('comments', function (Blueprint $table) { 17 $table->bigIncrements('id'); 18 $table->text('body'); 19 $table->bigInteger('user_id')->unsigned(); 20 $table->bigInteger('article_id')->unsigned(); 21 $table->timestamps(); 22 }); 23 } 24 25 /** 26 * Reverse the migrations. 27 * 28 * @return void 29 */ 30 public function down() 31 { 32 Schema::dropIfExists('comments'); 33 } 34}

show.blade.php

PHP

1@extends('app') 2 3@section('title', '記事詳細') 4 5@section('content') 6 @include('nav') 7 <div class="container"> 8 @include('articles.card') 9 </div> 10 <div class=h4>コメント</div> 11 <div> 12 @foreach($article->comments as $comment) 13 <div class="font-weight-bold">{{ $comment->user->name }}</div> 14 <div class="font-weight-lighter">{{ $comment->created_at->format('Y/m/d H:i') }}</div> 15 <div>{{ $comment->body }}</div> 16 @endforeach 17 </div> 18 19 <form method="POST" action="{{ route('comments.store') }}"> 20 @csrf 21 <div class="form-group"> 22 <textarea name="body" class="form-control" rows="16" placeholder="コメントを入力してください">{{ $comment->body ?? old('body') }}</textarea> 23 </div> 24 <button type="submit" class="btn blue-gradient btn-block">投稿する</button> 25 </form> 26@endsection

試したこと

show.blade.phpのコメントを表示する箇所(@foreachから@endforaeachまで)を一時的に削除すると詳細ページを表示することはできます。
その状態でコメントを入力し投稿すると同じエラー(上で記載したUnexpectedValueException)になります。

SQLでデータが送られているかも確認しました。
mysql> SHOW COLUMNS FROM comments;

+------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | body | text | NO | | NULL | | | user_id | bigint unsigned | NO | | NULL | | | article_id | bigint unsigned | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+-----------------+------+-----+---------+----------------+

mysql> select * from comments;

Empty set (0.01 sec)

入力したデータは保存できていないみたいです。

補足情報(FW/ツールのバージョンなど)

PHP 8.0.3
Laravel 6.20.24
Docker 20.10.5
docker-compose 1.29.0
windowsを使用。

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

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

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

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

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

guest

回答1

0

ベストアンサー

/var/www/html/storage/

に書き込み権限を与えてください。

投稿2021/05/09 07:55

phper.k

総合スコア3923

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

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

退会済みユーザー

退会済みユーザー

2021/05/09 08:13

コメントありがとうございます。 $ docker-compose exec app chmod -R 777 storage を実行してみました。 ErrorException Invalid argument supplied for foreach() (View: /var/www/html/resources/views/articles/show.blade.php) Illuminate\Foundation\Bootstrap\HandleExceptions::handleError resources/views/articles/show.blade.php:12 エラーの内容が変わったので、また調べてみます。
退会済みユーザー

退会済みユーザー

2021/05/10 01:09

$article->comments がカラだったりしませんか? コメントゼロのときにそのまま動かしていいのかどうか。
退会済みユーザー

退会済みユーザー

2021/05/10 13:42

m6uさん、コメントありがとうございます。 おっしゃる通り、$article->commentsに原因があるみたいです。 コメントはゼロだと思います。(そもそもデータが保存できていないので) コメントがない場合も問題なく表示させたいと考えております。 $article->commentsを$commentsにしたところ、 ErrorException Undefined variable: comments (View: /var/www/html/resources/views/articles/show.blade.php) と表示されました。 コントローラーからちゃんと変数が渡っていない気がするので、色々調べながら解決の糸口を見つけようとしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問