質問編集履歴

2 バージョン情報の追加

yaeyama

yaeyama score 57

2017/09/14 16:52  投稿

laravelで画像のアップロード
###前提・実現したいこと
PHPとLaravelで画像のアップロードをしたいのですが、
getClientOriginalName()でエラーが出ます。
###発生している問題・エラーメッセージ
```
FatalErrorException in AuthController.php line 67:
Call to a member function getClientOriginalName() on string
```
###該当のソースコード
まずコントローラーです。
```php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Image;
class AuthController extends Controller
{
   /*
   |--------------------------------------------------------------------------
   | Registration & Login Controller
   |--------------------------------------------------------------------------
   |
   | This controller handles the registration of new users, as well as the
   | authentication of existing users. By default, this controller uses
   | a simple trait to add these behaviors. Why don't you explore it?
   |
   */
   use AuthenticatesAndRegistersUsers, ThrottlesLogins;
   /**
    * Where to redirect users after login / registration.
    *
    * @var string
    */
   protected $redirectTo = '/';
   /**
    * Create a new authentication controller instance.
    *
    * @return void
    */
   public function __construct()
   {
       $this->middleware('guest', ['except' => 'logout']);
   }
   /**
    * Get a validator for an incoming registration request.
    *
    * @param array $data
    * @return \Illuminate\Contracts\Validation\Validator
    */
   protected function validator(array $data)
   {
       return Validator::make($data, [
           'name' => 'required|max:255',
           'email' => 'required|email|max:255|unique:users',
           'password' => 'required|confirmed|min:6',
       ]);
   }
   /**
    * Create a new user instance after a valid registration.
    *
    * @param array $data
    * @return User
    */
   protected function create(array $data)
   {
       $fileName = $data['avatar']->getClientOriginalName();
       Image::make($data['avatar'])->save(public_path() . '/images/' . $fileName);
       return User::create([
           'name' => $data['name'],
           'email' => $data['email'],
           'password' => bcrypt($data['password']),
           'avatar' => $fileName,
       ]);
   }
}
```
フォームです。
```php
@extends('layout')
@section('content')
<div class="bgcolor-white pt1em pb1em" id="contents">
   <div id="main_cnt_wrapper">
       <div id="yjContentsBody">
           <div class="yjContainer">
               <div class="form_box">
                   <h2>m<span>新規登録</span></h2>
                   {!! Form::open(array('files' => true)) !!}
                    @if (count($errors) > 0)
                       <div id="error_explanation">
                           <ul>
                               @foreach ($errors->all() as $error)
                                   <li>{{ $error }}</li>
                               @endforeach
                           </ul>
                       </div>
                   @endif
                   <div class="label">
                       {{ Form::label('email') }}
                       {{ Form::email('email', '', ['placeholder' => 'メールアドレスを入力']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('password') }}
                       {{ Form::password('password', ['placeholder' => 'パスワードを入力']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('password_confirmation') }}
                       {{ Form::password('password_confirmation', ['placeholder' => 'パスワードを入力(確認)']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('name') }}
                       {{ Form::text('name') }}
                   </div>
                   <div class="field">
                       {{ Form::file('avatar') }}
                   </div>
                   <div class="submit">
                       <div class="actions">
                           {{ Form::submit('Create User', ['class' => 'btn btn--block']) }}
                       </div>
                   </div>
                   {!! Form::close() !!}
                   <div class="more_link_box">
                       <strong>すでにアカウントを持っていますか?</strong>
                       <a href="/login">Log in</a>
                   </div>
               </div>
           </div>
       </div>
   </div>
@endsection
```
###補足情報(言語/FW/ツール等のバージョンなど)
windows
php 5.6.8
laravel 5
laravel 5.2
composer 1.4.2
  • PHP

    30559 questions

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

  • Laravel

    2530 questions

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

  • Laravel 5

    3124 questions

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

1 コードの編集

yaeyama

yaeyama score 57

2017/09/13 17:07  投稿

laravelで画像のアップロード
###前提・実現したいこと
PHPとLaravelで画像のアップロードをしたいのですが、
getClientOriginalName()でエラーが出ます。
###発生している問題・エラーメッセージ
```
FatalErrorException in AuthController.php line 67:
Call to a member function getClientOriginalName() on string
```
###該当のソースコード
まずコントローラーです。
```php
protected function create(array $data)
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Image;
class AuthController extends Controller
{
   /*
   |--------------------------------------------------------------------------
   | Registration & Login Controller
   |--------------------------------------------------------------------------
   |
   | This controller handles the registration of new users, as well as the
   | authentication of existing users. By default, this controller uses
   | a simple trait to add these behaviors. Why don't you explore it?
   |
   */
   use AuthenticatesAndRegistersUsers, ThrottlesLogins;
   /**
    * Where to redirect users after login / registration.
    *
    * @var string
    */
   protected $redirectTo = '/';
   /**
    * Create a new authentication controller instance.
    *
    * @return void
    */
   public function __construct()
   {
       $this->middleware('guest', ['except' => 'logout']);
   }
   /**
    * Get a validator for an incoming registration request.
    *
    * @param array $data
    * @return \Illuminate\Contracts\Validation\Validator
    */
   protected function validator(array $data)
   {
       return Validator::make($data, [
           'name' => 'required|max:255',
           'email' => 'required|email|max:255|unique:users',
           'password' => 'required|confirmed|min:6',
       ]);
   }
   /**
    * Create a new user instance after a valid registration.
    *
    * @param array $data
    * @return User
    */
   protected function create(array $data)
   {
       $fileName = $data['avatar']->getClientOriginalName();
       Image::make($data['avatar'])->save(public_path() . '/images/' . $fileName);
       return User::create([
           'name' => $data['name'],  
           'email' => $data['email'],  
           'password' => bcrypt($data['password']),  
           'avatar' => $fileName,
       ]);
   }  
}  
 
```
フォームです。
```php
{!! Form::open(array('files' => true)) !!}
   <div class="field">
       {{ Form::file('avatar') }}
   </div>
   <div class="submit">
       <div class="actions">
       {{ Form::submit('Create User', ['class' => 'btn btn--block']) }}
@extends('layout')
@section('content')
<div class="bgcolor-white pt1em pb1em" id="contents">
   <div id="main_cnt_wrapper">
       <div id="yjContentsBody">
           <div class="yjContainer">
               <div class="form_box">
                   <h2>m<span>新規登録</span></h2>
                   {!! Form::open(array('files' => true)) !!}
                    @if (count($errors) > 0)
                       <div id="error_explanation">
                           <ul>
                               @foreach ($errors->all() as $error)
                                   <li>{{ $error }}</li>
                               @endforeach
                           </ul>
                       </div>
                   @endif
                   <div class="label">
                       {{ Form::label('email') }}
                       {{ Form::email('email', '', ['placeholder' => 'メールアドレスを入力']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('password') }}
                       {{ Form::password('password', ['placeholder' => 'パスワードを入力']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('password_confirmation') }}
                       {{ Form::password('password_confirmation', ['placeholder' => 'パスワードを入力(確認)']) }}
                   </div>
                   <div class="label">
                       {{ Form::label('name') }}
                       {{ Form::text('name') }}
                   </div>
                   <div class="field">
                       {{ Form::file('avatar') }}
                   </div>
                   <div class="submit">
                       <div class="actions">
                           {{ Form::submit('Create User', ['class' => 'btn btn--block']) }}
                       </div>
                   </div>
                   {!! Form::close() !!}
                   <div class="more_link_box">
                       <strong>すでにアカウントを持っていますか?</strong>
                       <a href="/login">Log in</a>
                   </div>
               </div>
           </div>
       </div>
   </div>
   </div>
{!! Form::close() !!}
@endsection
```
###補足情報(言語/FW/ツール等のバージョンなど)
windows
php 5.6.8
laravel 5
composer 1.4.2
  • PHP

    30559 questions

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

  • Laravel

    2530 questions

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

  • Laravel 5

    3124 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る