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

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

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

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1491閲覧

PHP、laravel画像投稿機能で配列から文字列に変更する記述方法が知りたい

ishidakouiki

総合スコア73

Laravel

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/26 03:00

今画像を含めた投稿機能の実装をしていて、
creae.blade.php(投稿画面)

@extends('layouts.app') @section('content') <div class="panel-body"> <div class="d-flex flex-column align-items-center mt-5"> <div class="col-xl-7 col-lg-8 col-md-10 col-sm-11 post-card"> @include('commons.error_messages') <div class="card"> <div class="card-header"> 出品作成 </div> <div class="card-body"> <form class="upload" id="new_post" enctype="multipart/form-data" action="{{ route('post.store') }}" accept-charset="UTF-8" method="POST"> @method('POST') {{csrf_field()}} <div class="md-form"> <input class="form-control" placeholder="車両名" name="name" value=""/> </div> <div class="md-form"> <input class="form-control" placeholder="年式" name="year" value=""/> </div> <div class="md-form"> <input class="form-control" placeholder="価格" name="price" value=""/> </div> <div class="md-form"> <input class="form-control" type="file" placeholder="" name="attachment[]" multiple value="" > </div> <div class="form-group"> <textarea name="explanation" class="form-control" rows="10" placeholder="説明"></textarea> </div> <div class="text-center"> <input type="submit" name="commit" value="出品する" class="btn btn-primary w-25" data-disable-with="投稿する"/> </div> </form> </div> </div> </div> </div> @endsection

name="attachment[]" =複数画像の投稿をしたいので、[]をつけて配列にしています。
web.php

Route::get('/', 'PostsController@index')->middleware('auth')->name('index'); Route::get('bike/new','PostsController@index')->name('post.index');//バイク販売ページ表示// Route::get('post/new','PostsController@create')->name('post.create');//バイク投稿ページ表示// Route::post('/','PostsController@store')->name('post.store');//バイク投稿機能//

PotsController.blade,php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\PostRequest; use App\Post; class PostsController extends Controller { public function index() { $posts = Post::orderBy('created_at', 'desc')->get(); return view('posts.index', ['posts' => $posts]); } public function create() { return view('posts.create'); } public function store(PostRequest $request) { $post = new Post; $post->name = $request->name; $post->year = $request->year; $post->price = $request->price; $post->attachment = $request->attachment; $post->explanation = $request->explanation; $post->user_id = \Auth::id(); $post->save(); return redirect()->route('index'); } }

PostsRequest.php(フォームリクエストを使用しているため、こちらに投稿機能のバリデーションを記入)(画像は1枚以上5枚以下にしたいため、min:1|max:5',と記述。

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class PostRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' =>'string|required|max:30', 'year' =>'string|required|max:30', 'price' =>'string|required|max:10', 'attachment' =>'required|min:1|max:5', 'explanation' => 'string|required|max:500', ]; } }

index.blade.php(投稿を表示させる画面)
(複数画像を表示させたいたてめ、foreachを使用して、$attachment->url画像のURLを出力している。
〜省略〜

<h3 class="h5 title"> {{ $post->name }} </h3> <div class="mb-5"> {{ $post->year }} </div> <div class="mb-5"> {{ $post->price }} </div> @foreach($post-> as $attachment) <div class="mb-5"> <img src="{{ $attachment->url }}"/> </div> @endforeach <div class="mb-5"> {{ $post->explanation }} </div> <section>

〜省略〜
と記述しています。
その後内容を入力して、投稿ボタンをクリックしたら、
Array to string conversion=配列から文字列への変換
とエラーが表示されたので、
creae.blade.php (投稿画面)の複数画像を投稿したいので、name="attachment[]" (配列)を記述しているのを文字列に変換しないといけないので、
PostRequest.phpに

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class PostRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ $array = array("attachment","attachment","attachment","attachment","attachment",);    print_r($array); var_dump(implode($array)); public function rules() { return [ 'name' =>'string|required|max:30', 'year' =>'string|required|max:30', 'price' =>'string|required|max:10', 'attachment' =>'required|min:1|max:5', 'explanation' => 'string|required|max:500', ]; } }

↓(配列から文字列に変更する記述)

$array = array("attachment","attachment","attachment","attachment","attachment",);    print_r($array); var_dump(implode($array));

を追加したら、
Class App\Http\Requests\PostRequest does not exist
とエラーが表示されています。
エラー画面に、

$array = array("attachment","attachment","attachment","attachment","attachment",);    print_r($array); var_dump(implode($array));

の記述(配列から文字列に変換する処理の記述)がおかしいとエラー分が表示されていますが、
調べても解決策がわかりません。
長い文章ですみません、解決策等ありますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1$post->attachment = implode(',',$request->attachment);

implode関数を通じて配列を文字列に変換できます。
文字列を配列にしたい場合はexplode関数を利用すれば可能です。

他にはjson_encode/json_decodeserialize/unserialize関数も同じことできます。

投稿2021/12/26 15:31

skys215

総合スコア910

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

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

ishidakouiki

2021/12/26 16:07

丁寧でわかりやすいご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問