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

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

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

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

PHP

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

Q&A

2回答

851閲覧

Laravel モデルのインスタンス保存ができない

hideyov

総合スコア18

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/06/22 22:33

昨日に引き続き「PHPフレームワーク Laravel入門」という書籍で勉強中ですが、モデルのadd/createアクションでエラーが出ました。
Person モデルへのaddとcreateアクションを PersonController.php に追記、ルート情報も追加後、 http://homestead.test/person/add のページは表示されますが、フォーム送信するとエラーが出ます。

add のページは表示され、フォームに入力まではできる
add のページは表示され、フォームに入力まではできる

フォーム送信するとエラーが出る
フォーム送信するとエラーが出る

関係するファイルを示しますので、アドバイスをお願いします!
さらに必要な情報がございましたら、御指摘ください。

モデル

app/Person.php

php

1<?php 2 3namespace App; 4use Illuminate\Database\Eloquent\Model; 5 6class Person extends Model 7{ 8 protected $guarded = array('id'); 9 10 public static $rules = array( 11 'name' => 'required', 12 'mail' => 'email', 13 'age' => 'integer|min:0|max:150' 14 ); 15}

コントローラ

app/Http/Controllers/PersonController.php

php

1class PersonController extends Controller 2{ 3 public function index(Request $request) { 4 $items = Person::all(); 5 return view('person.index', ['items' => $items]); 6 } 7 8 public function find(Request $request) { 9 return view('person.find', ['input' => '']); 10 } 11 12 public function search(Request $request) { 13 $item = Person::nameEqual($request->input)->first(); 14 $param = ['input' => $request->input, 'item' => $item]; 15 return view('person.find', $param); 16 } 17 18 public function add(Request $request) { 19 return view('person.add'); 20 } 21 22 public function create(Request $request) { 23 $this->validate($request, Person::$rules); 24 $person = new Person; 25 $form = $request->all(); 26 unset($form['_token']); 27 $person->fill($form)->save(); 28 return redirect('/person'); 29 } 30}

ルーティング

routes/web.php

php

1use App\Http\Middleware\HelloMiddleware; 2 3Route::get('hello', 'HelloController@index'); 4Route::post('hello', 'HelloController@post'); 5 6Route::get('hello/add', 'HelloController@add'); 7Route::post('hello/add', 'HelloController@create'); 8 9Route::get('hello/edit', 'HelloController@edit'); 10Route::post('hello/edit', 'HelloController@update'); 11 12Route::get('hello/show', 'HelloController@show'); 13 14Route::get('hello/del', 'HelloController@del'); 15Route::post('hello/del', 'HelloController@remove'); 16 17Route::get('person', 'PersonController@index'); 18Route::get('person/find', 'PersonController@find'); 19Route::post('person/find', 'PersonController@search'); 20 21Route::get('person/add', 'PersonController@add'); 22Route::post('person/add', 'PersonController@create');

ビュー

resources/views/person/add.blade.php

php

1@section('menubar') 2 @parent 3 新規作成ページ 4@endsection 5 6@section('content') 7 @if (count($errors) > 0) 8 <div> 9 <ul> 10 @foreach($errors->all() as $error) 11 <li>{{$error}}</li> 12 @endforeach 13 </ul> 14 </div> 15 @endif 16 <table> 17 <form action="/person/add" method="post"> 18 {{ csrf_field() }} 19 <tr><th>name: </th><td><input type="text" name="name" value="{{old('name')}}"></td></tr> 20 <tr><th>mail: </th><td><input type="text" name="mail" value="{{old('mail')}}"></td></tr> 21 <tr><th>age: </th><td><input type="text" name="age" value="{{old('age')}}"></td></tr> 22 <tr><th></th><td><input type="submit" value="send"></td></tr> 23 </form> 24 </table> 25@endsection

開発環境:Vagrant + VirtualBox / Homestead
言語:PHP 7.3.4-1+ubuntu18.04.1+deb.sury.org+3
フレームワーク:Laravel Framework 5.5.45
DB:SQLite
Mac OSX 10.11.6

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

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

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

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

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

guest

回答2

0

この本は,昔読んだことがあり,同じところで詰まった記憶があります。

PHP

1 public static $rules = array( 2 'name' => 'required', 3 'mail' => 'email', 4 'age' => 'integer|min:0|max:150' 5 );

の部分を,

PHP

1 public static $rules = [ 2 'name' => 'required', 3 'mail' => 'email', 4 'age' => 'integer|min:0|max:150' 5 ];

としたら行けたと思います。
別の本で,php5.4以上はarrayが非対応?と書いてあって,
それを信じて,上記のように書き直したんですよね。

ただ,今気になってPHPのドキュメントを見ても,
arrayは非対応という記述が見当たりませんでした(むしろ使えるのではないかとも思えてきました)。
信用できる情報ではないと思いますが,もし,まだ解決していなければ,
一度お試しいただけると幸いです。

投稿2019/06/26 12:47

tanukitii

総合スコア44

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

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

tanukitii

2019/06/26 17:51

上記URLにある「PHP 5.4 以降では配列の短縮構文が追加され、 array() の代わりに [] を使えるようになりました。 」という部分でしょうか。 ただこれだと,別に使えないわけではないという印象を受けるのですが,いかがでしょうか。
hentaiman

2019/06/26 18:13

回答読んだら曖昧そうに見えたのでマニュアルに書いてありますよ~って事で提示しました > 別に使えないわけではないと どちらの書き方でも可です 自分が回答した回答に他の人が回答すると通知が来るので、読んでみた結果のお節介コメントだと思ってください
guest

0

undefined methodは未定義のメソッドという意味です
エラーを出しているファイルはindex.blade.phpです

そういうエラーメッセージなので、まずは該当のファイルを調べてgetDataと書いている個所をチェックするのが良いです
もしそこら辺のネットから拾ってきた書き方を真似しているんだとしたら、それは事前にgetDataを定義した上でbladeに書いているからエラーになっていないだけなので、参考にしたサイトを良くみてはどうでしょう?
何かしら参考書を見て真似しただけというのなら、本が間違っているので内容の訂正等の情報が無いかチェックしてみましょう

投稿2019/06/23 00:21

hentaiman

総合スコア6415

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

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

m.ts10806

2019/06/23 01:33

質問者さんが参考にしてるのは熟練者からは「投げ捨てろ」と言われることもある通称「青本」ってやつですね。私は日本語訳ドキュメントで事足りるので読んだことないですけど・・・ 結構この本利用している人で「え?」って質問している人は多いです。
hentaiman

2019/06/23 02:12

質問文からは質問者のレベルが推測できなかったんだけどそういう事だったのね。本自体が間違ってるならこのきっと回答内容じゃ解決出来ないな ついでにAmazonで書籍名と著作者調べてみました。 【掌田津耶乃(しょうだつやの)。ほぼ男性。テクニカルライター兼3流プログラマ。】 と書いてあるので、著作者自身は正当な自己評価が出来てるようだ 本を書くでもプログラム作るでも、お金を得るからにはキチっと責任を持つ一流タイプの人にやって欲しいね
m.ts10806

2019/06/23 02:25 編集

私が買ったことがある別の言語のフレームワークの本で著者も自身で「飽きたら次のおもちゃへのタイプ」と語ってますね。特化したタイプではないので「動けばOK」のコードが載っていることも結構あるようです。 もちろん質問者さんが前後の流れを汲まずにコードを書いている可能性もあるので、なんとも言えませんが。
hideyov

2019/06/23 23:59

ご回答ありがとうございます。 コードは、問題が多いとの御指摘のある「PHPフレームワーク Laravel入門」を写経したものです。 正誤表は確認済みです。 当方、あるプログラミングスクールのコースで1ヶ月ほど前に初めてLaravelに触れたばかりで、まだ全体像が押さえられていないと痛感しています。ご指摘の点を解決するのにも少し時間がかかりそうです。 もっと基礎を固めてから、戻ってくることになるかと思います。 取り急ぎ、お礼まで...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問