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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

15738閲覧

Laravelでのバリエーション及びページネーション

Nitta

総合スコア96

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/07/19 00:21

編集2018/07/19 06:27

お世話になってます。PHP初心者です。
今、フォームから画像をアップロードするものを
作成しております。
確かに画像を所定の場所(public\item\photos)にアップロードできるのですが、
入力規則及びページネーションが上手く入りません。
以前、同類のやり方で上手くできたのですが、何故か今回は入りません。
ご教示お願いできませんでしょうか?
<やりたいこと>
フォームに入力規則及びページネーションを入れる
<エラー名>
Method Illuminate\Database\Eloquent\Collection::render does not exist
(Collectionクラスにrenderメソッドはない)

<やったこと>
$ehime->render()や$ehime->links()で試したがダメ

<参考サイト>
①Laravelのvalidationメソッドでバリデーションを実装する入門編(日本語エラーメッセージ付き)
https://www.ritolab.com/entry/40
②laravel5.5を使用して複数画像をアップロードする方法
https://qiita.com/netfish/items/ef01cdb5f58742563e87

<記入内容>
web.php

Route::get('items', 'ItemController@index'); Route::match(['GET', 'POST'], '/create', 'ItemController@create');

form(create.blade.php)

@extends('layouts.master_request') @section('title', 'Laravel tutorial(Biginner)') @section('content') @if (count($errors) > 0) <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif <!-- フォーム --> <h3>Form_Sample(Enter_Screen)</h3> <p>Please enter items</p> <form action="{{ url('create') }}" method="POST" enctype="multipart/form-data"> <label for="jan">Jan_Code:</label> <input type="text" class="form-control" name="jan" value="{{old('jan')}}"> <br> <label for="name">Item_name</label> <input type="text" class="form-control" name="name" value="{{old('name')}}"> <br> <label for="photo">Image_File(Multiple possible)</label> <input type="file" class="form-control" name="files[][photo]" multiple> <br> <hr> {{ csrf_field() }} <button class="btn btn-success"> Upload </button> </form> <table class="table table-striped table-hover"> <thead> <tr> <th>No</th> <th>name</th> </tr> </thead> <tbody>   @foreach($ehime as $item)   <tr> <td>{{$item->item_id}}</td><td>{{$item->path}}</td>   </tr>   @endforeach </tbody> </table> <!-- page control --> {!! $ehime->render() !!} @endsection

Controller(ItemController.php)

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Item; use App\ItemPhoto; use App\Http\Requests\ItemRequest; class ItemController extends Controller{ public function index() { $items = ItemPhoto::all();  return view('item.create')->with('ehime',$items); } public function create(Request $request) { // POST if($request->isMethod('POST')) {   // 商品情報の保存   $item = Item::create(['jan'=> $request->jan, 'name'=> $request->name]);   // 商品画像の保存 foreach ($request->file('files') as $index=> $e) { $ext = $e['photo']->guessExtension();   $filename = "{$request->jan}_{$index}.{$ext}";   $path = $e['photo']->storeAs('photos', $filename);   // photosメソッドにより、商品に紐付けられた画像を保存する   $item->photos()->create(['path'=> $path]); } return redirect()->action('ItemController@index'); } // GET return view('item.create'); } }

バリデーション(ItemRequest.php)

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ItemRequest extends FormRequest{ public function authorize() { return true; } public function rules() { if($this->isMethod('get')) return[];  return [ 'jan'=>'required',   'name'=>'required',   'file.*.photo'=>'required|image|mimes:jpeg,png,jpg,gif',  ]; } public function messages() {  return [ "required" => "Required items",   "image" => "Specified files is not image files!!",   "mines" => "Extension of specified files is not PNG or JPG or GIF!!",  ]; } }

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

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

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

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

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

m.ts10806

2018/07/19 00:33

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。
m.ts10806

2018/07/19 00:33

公式リファレンスは確認されたのでしょうか。参考にした記事がありましたらそちらも提示してください。
m.ts10806

2018/07/19 00:34

また、インデントが全く付いていません。読みづらいですしコードのミスを見つけにくくなるので調整してください。
m.ts10806

2018/07/19 00:59

クラスとその中のメソッドが同じ階層になっていますが・・・。全角空白でインデントつけてはいけませんよ。質問以前に動かないコードを提示してしまっています。コードフォーマッター機能のあるテキストエディタ使ってください。
m.ts10806

2018/07/19 01:39

(2回目)全角空白でインデントつけてはいけませんよ。質問以前に動かないコードを提示してしまっています。コードフォーマッター機能のあるテキストエディタ使ってください。
Nitta

2018/07/19 05:58

返信ありがとうございます。上記の内容全て対応しています。今後共よろしくお願いします。
m.ts10806

2018/07/19 06:16

えっと、どこかでしょうか。インデントに全角空白が利用されまくってますけど。「コードフォーマッター機能のあるテキストエディタ使ってください。」と助言もしたのですが。
guest

回答2

0

ページネーションを入れるのであれば$items = ItemPhoto::all();ではなくて$items = ItemPhoto::paginate(10);ですね。
10のところには1ページに表示したい件数を入れて下さい。
で、view側に{{ $ehime->links() }}でページャーが出るかと。

投稿2018/07/19 00:53

k-fukuda

総合スコア219

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

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

Nitta

2018/07/19 01:13

返信ありがとうございます。 ページネーションは上手く行きました。 ありがとうございました。
guest

0

ベストアンサー

■ペジネーションが上手く行かない件

php

1$items = ItemPhoto::all();

ここで「全件」取得しています。
全件取得の場合、ペジネーションは不要です。(いつでも、全1ページ)

ですので、

php

1$ehime->render(); 2$ehime->links();

上記のような、ペジネーション関連の関数は、取得結果のCollectionに用意されません。

ペジネーションを使いたいなら、取得件数を制御してください。

■入力規則がかからない件

ItemController

php

1public function create(Request $request) 2{ 3// POST 4if ($request->isMethod('POST')) { 5// 商品情報の保存 6$item = Item::create(['jan'=> $request->jan, 'name'=> $request->name]); 7// 商品画像の保存 8foreach ($request->file('files') as $index=> $e) { 9$ext = $e['photo']->guessExtension(); 10$filename = "{$request->jan}_{$index}.{$ext}"; 11$path = $e['photo']->storeAs('photos', $filename); 12// photosメソッドにより、商品に紐付けられた画像を保存する 13$item->photos()->create(['path'=> $path]); 14} 15return redirect()->action('ItemController@index'); 16}

せっかく作成した ItemRequest を利用している部分がありませんので、
バリデーションはかからないと思います。

ItemRequest を使ってください。


上記、ほぼ答えですが、正解のコード自体は書いていません。
初心者さんとのことなので、これをヒント?にやり方を探してみると良いと思います。

それから、少し厳しいようですがlaravelの理解が足りていないのかな?と感じましたので、
リファレンスや、参考サイトなどをよく読まれることをお勧めします。

「以前は上手くできた」とのことですので、
そのうまくいった時のコードと、今のコードで「どこがどう違うのか」、にらめっこしてみるのもいいと思いますよ。

投稿2018/07/19 00:52

mix-peach

総合スコア1910

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

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

Nitta

2018/07/19 01:18

返信ありがとうございました。 ページネーションは上手く行きましたが、 public function create(ItemRequest $request) に変えてみたのですが、『App\Http\Requests\ItemRequestがない』 と なるんですが、間違いなくありますしどうすればいいでしょうか?
mix-peach

2018/07/19 06:12

おや? Controllers のディレクトリの横に、Requests のディレクトリが置いてあるんですよね?? 書き方的には間違はなさそうかなと思うので、 あとは、実際にファイルが置いてあるディレクトリ名と、namespace宣言やら、use宣言などの、スペルが間違っていないか確認してみると良いかもしれません。。。
Nitta

2018/07/19 06:15

お世話になってます。 バリデーションできなかったのは、ItemRequest.phpファイルに記載している ItemRequestクラスの最後の『}』が無くなっていた為でした。 誤記入(泣)。今後共よろしくお願いします。
mix-peach

2018/07/20 00:34

解決したようで何よりです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問