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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

2137閲覧

Laravel5 でバリデーションルールを配列で与えたい

alberorana

総合スコア52

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/08/02 23:19

前提・実現したいこと

こんにちは、お世話になります。
現在、Laravel5 .5を使ってアンケートシステムを作っています。
その際にDBに格納してあるinputタグを取り出し、動的にフォームを作ります。

inputタグの種類や個数も変化するため、バリデーションも動的に変化させる必要だと考えております。

そこで、同じレコードにバリデーションルールも格納した上でループで適用させようとしましたが、うまくいきませんでした。
できればフレームワークの機能を使って実装したいため、解決策をご存知の方がいらっしゃればご回答をおねがいできれば幸いです。

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

Parse error: syntax error, unexpected 'foreach' (T_FOREACH), expecting ']'

該当のソースコード

$data = $event->index($id); $validatedData = $request->validate([ foreach($data as $rule) { echo $rule->name . ' => ' . $rule->validate . ',' } ])

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

php7.2
laravel5.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

もし、質問者さんがやりたいことを私が実現するなら、下記の様にします。
以下に長々とサンプル環境構築のソースを貼っていますが、結論だけ知りたいのであればControllerを見て貰えば良いと思います。

ちなみに、上記のエラーはphpの根本的な理解不足によるものかと。
配列定義の中にforeachは書けませんよ。

サンプル環境定義

(データベース定義)

php

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

(テスト用レコード)

php

1<?php 2 3use Illuminate\Database\Seeder; 4use App\ValidationMaster; 5 6class ValidationMasterSeeder extends Seeder 7{ 8 /** 9 * Run the database seeds. 10 * 11 * @return void 12 */ 13 public function run() 14 { 15 ValidationMaster::create(['field'=>'name','rule'=>'required']); 16 ValidationMaster::create(['field'=>'mail','rule'=>'required|string|email|max:255']); 17 } 18}

実装

テスト用View

html

1@extends('layouts.app') 2 3@section('content') 4<div class="container"> 5 @if ($errors->any()) 6 <div class="alert alert-danger"> 7 <ul> 8 @foreach ($errors->all() as $error) 9 <li>{{ $error }}</li> 10 @endforeach 11 </ul> 12 </div> 13 @endif 14 <form method="POST" action="{{route('test.store')}}"> 15 {{csrf_field()}} 16 <input type="text" name="name"> 17 <input type="text" name="email"> 18 <input type="submit" value="更新"> 19 </form> 20</div> 21@endsection

コントローラ

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\ValidationMaster; 7 8class TestController extends Controller 9{ 10 /** 11 * Display a listing of the resource. 12 * 13 * @return \Illuminate\Http\Response 14 */ 15 public function index() 16 { 17 return view('test'); 18 } 19 20 21 /** 22 * Store a newly created resource in storage. 23 * 24 * @param \Illuminate\Http\Request $request 25 * @return \Illuminate\Http\Response 26 */ 27 public function store(Request $request) 28 { 29 $validations = ValidationMaster::all(); 30 $rule = []; 31 foreach ($validations as $validation) { 32 $rule[$validation->field] = $validation->rule; 33 } 34 $this->validate($request,$rule); 35 return redirect('test.index'); 36 } 37}

(ルーティング)

php

1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13 14Route::get('/', function () { 15 return view('welcome'); 16}); 17Route::resource('test', 'TestController'); 18Auth::routes();

実行結果

イメージ説明

投稿2018/08/03 00:48

motuo

総合スコア3027

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

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

alberorana

2018/08/03 01:19

$this->validate($request,$rule);でいけるんですね! さっそく試してみます。
alberorana

2018/08/04 22:36

無事実装することができました! ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問