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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

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

Q&A

解決済

1回答

2389閲覧

Laravel 5.2 ErrorException in ~~~.php line 7. Undefined variable: article エラーの解決方法

spellbound

総合スコア190

Laravel

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

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

0グッド

0クリップ

投稿2016/12/13 15:11

前提・改善したいこと

エラー文は、Form::model内で記載している「$article」変数が定義されていないことを指摘しているので、適切な場所に定義する方法が知れたらいいなと思っています。

ちなみに、現在はいわゆるブログ投稿プラットフォームを開発中です。Article(記事)モデルを使っているので、Form::modelを採用しています。投稿ページを開発している時にエラーが発生しました。

発生しているエラー文

ErrorException in a3d76ec2ed19258a5a30b767479af6d99116093b.php line 7: Undefined variable: article (View: /Users/Full_Name/projects/app_name/resources/views/articles/create.blade.php)

Laravel Collective Htmlを利用し、下記のコードで、フォーム画面を作成しています。

**create.blade.php** @extends('layout') @section('content') {{ Form::model($article, array('action' => array('ArticlesController@store', $article->id))) }} <div> {{ Form::label('category', 'category', ['style' => '']) }} {{ Form::select('category', array( 'Ca' => '-Category-', 'Ge' => 'General', 'Cu' => 'Culture', 'De' => 'Design', 'Ec' => 'Economics', 'En' => 'Entertainment', 'Fo' => 'Food', 'Li' => 'Life Style', 'Po' => 'Politics', 'Ro' => 'Romance', 'St' => 'Study', 'Te' => 'Technology', 'Tr' => 'Travel', 'Wo' => 'Work' ), 'Ca') }} </div> <div> {{ Form::label('title', 'title', ['style' => '']) }} {{ Form::text('title') }} </div> <div> {{ Form::label('image_url', 'image_url', ['style' => '']) }} {{ Form::text('image_url') }} </div> <div> {{ Form::label('image_url', 'image_url', ['style' => '']) }} {{ Form::text('text') }} </div> <div> {{ Form::submit('publish', ['class' => 'btn btn--block']) }} </div> </div> {!! Form::close() !!} @endsection

#既に試したこと

かなりググりましたが、Laravel 5.1からLaravel 5.2の仕様変更で、$error変数の扱い方が変わった点と初期値はnullにすることでした。

こちらの記事を参考に、nullを入れてみましたが、エラー文は変わりませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

  1. Form::modelではなく、Form::openを採用する(自分の場合は、一般的なHTMLタグを採用しました)
  2. formタグ内のaction=""をルーティング記述と紐づけること(言い換えると、同じであるか確認)
  3. 一般的なHTMLタグを採用した場合、Formファザードにデフォルトで搭載されていない部分を記載する(formタグ内に、<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">を記載する)

自分の場合は、上記のプロセスでエラー文が無くなりました。
参考程度に書き換えたコードを残しておきます。

@extends('layout') @section('content') <div id="main"> <form method="POST" action="{{ url('articles/store') }}" accept-charset="UTF-8"> <div class="create_form_area"> <select name="category"> <option value="category" selected="selected">-Category-</option> <option value="general">General</option> <option value="culture">Culture</option> <option value="design">Design</option> <option value="economics">Economics</option> <option value="entertainment">Entertainment</option> <option value="food">Food</option> <option value="life style">Life Style</option> <option value="politics">Politics</option> <option value="romance">Romance</option> <option value="study">Study</option> <option value="technology">Technology</option> <option value="travel">Travel</option> <option value="work">Work</option> </select> <input placeholder="Title" type="text" name="title" style="margin-top: 1em;"> <input placeholder="Image URL" type="text" name="image_url" style="margin-top: 1em;"> <textarea name="text" placeholder="text" rows="6" style="margin-top: 1em;"></textarea> <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> <input type="submit" value="Publish" style="margin: 1.5em 0 3em 0"> </div> </form> </div> @endsection

投稿2016/12/13 21:51

spellbound

総合スコア190

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問