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

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

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

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

PHP

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

Q&A

解決済

2回答

456閲覧

phplaravelを使っていて、画面がエラーになる。

gomes_2222

総合スコア94

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/10/23 07:06

編集2020/10/28 07:18

前提・実現したいこと

phplaravelの勉強中です。
PHPフレームワーク Laravel入門という本を購入して勉強してます。144ページのところでエラーです。
フォームにバリデーションに引っかかる不適切な情報を入力した場合に、バリデーションの情報を保持しつつindex.blade.phpにページが自動で飛ぶようにしたいです。(エラーメッセージを表示した状態のindex.blade.phpが表示されるようにしたい。)

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

フォームに、不適切な情報を記入してフォームの送信ボタンを押すと、
「このサイトにアクセスできません localhost で接続が拒否されました。」という画面になってしまいます。

該当のソースコード

HelloController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\Http\Requests\HelloRequest; use Validator; class HelloController extends Controller { public function index(Request $request) { return view('hello.index', ['msg'=>'フォーム入力:']); } public function post(Request $request) { $validator = Validator::make($request->all(),[ 'name' => 'required', 'mail' => 'email', 'age' => 'numeric|between:0,150', ]); if($validator->fails()) { return redirect('/hello') ->withErrors($validator) ->withInput(); } return view('hello.index', ['msg'=>'正しく入力された']); } }

Hellorequests.php

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HelloRequest extends FormRequest { public function authorize() { if ($this->path() == 'hello') { return true; } else { return false; } } public function rules() { return [ 'name' => 'required', 'mail' => 'email', 'age' => 'numeric|between:0,150', ]; } public function messages() { return [ 'name.required' => '名前は必ず入力して下さい。', 'mail.email' => 'メールアドレスが必要です。', 'age.numeric' => '年齢を整数で記入下さい。', 'age.between' => '年齢は0 ~ 150の間で入力下さい。', 'age.hello' => 'Hello! 入力は偶数のみ受け付けます。', ]; } }

index.blade.php

@extends('layouts.helloapp') @section('title', 'Index') @section('menubar') @parent インデックスページ @endsection @section('content') <p>{{$msg}}</p> @if (count($errors) > 0) <p>入力に問題があります</p> @endif <form action="/hello" method="post"> <table> @csrf @error('name') <tr><th>ERROR</th><td>{{$message}}</td></tr> @enderror <tr><th>name: </th><td><input type="text" name="name" value="{{old('name')}}"></td></tr> @error('mail') <tr><th>ERROR</th><td>{{$message}}</td></tr> @enderror <tr><th>mail: </th><td><input type="text" name="mail" value="{{old('mail')}}"></td></tr> @error('age')) <tr><th>ERROR</th><td>{{$message}}</td></tr> @enderror <tr><th>age: </th><td><input type="text" name="age" value="{{old('age')}}"></td></tr> <tr><th></th><td><input type="submit" value="send"></td></tr> </table> </form> @endsection @section('footer') copyright 2020 tuyano. @endsection

web.php

<?php use Illuminate\Support\Facades\Route; use App\Http\Middleware\HelloMiddleware; Route::get('/', function () { return view('welcome'); }); Route::get('hello','App\Http\Controllers\HelloController@index'); Route::post('hello','App\Http\Controllers\HelloController@post');

環境

MAMPを使っています。
apache server
MySQL server
共に正常に起動していることを確認しました。
なお、バリデーションに引っかからないように入力してフォーム送信すると問題なくページは表示されます。
わざとバリデーションに引っかかるように入力すると上記エラーとなり、ページを表示できません。
なので、return view は問題なく機能していますが、return redirect がうまく動作していないかと思っています。

PHP 7.4.1
MySQL 5.7
PHP laravel 8.7.1

試したこと

インターネット接続については、問題なくできていることは確認しました。
今回問題なっているページだけ開ません。

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

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

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

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

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

m.ts10806

2020/10/23 07:25

>インターネット接続については、問題なくできていることは確認しました。  localhost ならインターネット関係ないのでは。 いずれにしてもコントローラだけ提示されても他者には再現できないので、 環境情報含めて全て提示してください。
Suumon

2020/10/23 10:47

あの本って、XAMPP使って環境構築してたような…。 Apache起動してないだけでは?
gomes_2222

2020/10/28 07:07 編集

補足します。 結局解決方法がないので、先に進んだところ、やはり同様のエラーが出ました。 おそらく、上記で一番上に提示したコード、コントローラ(HelloController)の「return redirect('/hello')」が原因かと思います。redirectメソッドが正しく動作しておりません。書き方って上記の通りで正しいのでしょうか? フォーム入力後、バリデーション に引っかかる場合は自動でhello.indexにページが飛ぶようにしたいのです。よろしくお願いします。
meshi_s

2020/10/29 00:51

バージョンが違う為、少しいじって実行したので確実ではありませんが、問題なく動きました。 Laravel外のところで問題が発生しているのではないでしょうか。
gomes_2222

2020/10/29 01:43

おそらく私の解決方法では根本の解決になっていないということですかね。 別途質問させていただきます。
m.ts10806

2020/10/29 02:20

>別途質問させていただきます。 質問編集して状況追記すれば良いのでは・・。 同じ内容を同じ人が投稿するのはマナーとしてよろしくないかと思います。 「解決済み」は「受付中」に戻すことができます。
gomes_2222

2020/10/29 04:39

恥ずかしながら、そのことを知りませんでした。 以後、気をつけます。申し訳ありませんでした。
m.ts10806

2020/10/29 04:40

「別途立てた質問」を削除依頼出して本質問で対応続ければ良いのでは。
meshi_s

2020/10/29 07:01

> おそらく私の解決方法では根本の解決になっていないということですかね。 私が確認したバージョンも違うのと、一応解決しているので、また問題発生時に確認でいいのではないでしょうか?
guest

回答2

0

自己解決

なんとか無事解決しました。

HelloControllerを下記の通り修正しました。

public function post(HelloRequest $request)

HelloControllerのpostの引数を変更しました。
いろいろ弄ってくうちになんとか解決したという感じでございます。
色々とありがとうございました。

投稿2020/10/29 00:34

gomes_2222

総合スコア94

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

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

0

'age.hello' => 'Hello! 入力は偶数のみ受け付けます。',

これ消したらいけませんか?

投稿2020/10/24 04:02

Suumon

総合スコア211

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

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

gomes_2222

2020/10/26 06:21

ダメでした・・・
Suumon

2020/10/28 12:02

``` public function authorize() { if ($this->path() == 'hello') { return true; } else { return false; } } ``` 消したらどうなりますか?? たぶんこれではないかと。 authorizeがfalseを返すと、403ステータスコードのHTTPレスポンスが自動的にかえされるみたいです。 https://readouble.com/laravel/5.8/ja/validation.html
gomes_2222

2020/10/28 16:55

なるほど。勉強になります。ありがとうございます。 しかしながら、ご指摘の通りauthorizeの部分を丸ごと消しても結果は変わらず、やはり「このサイトにアクセスできません localhost で接続が拒否されました。」という画面になってしまいます。
gomes_2222

2020/10/29 00:34

解決しました。 色々ご対応くださり、ありがとうございました。
Suumon

2020/10/29 00:42

解決したのですね。よかったです。 HelloRequestのインスタンスを渡してなかったのですね。 見落としてました。
meshi_s

2020/10/29 00:54

丸ごと消すのではなく、```return true;```だけにして確認した方がいいのでは。 また、Hellorequests.phpは使用されていないようなのですが…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問