0

まず、私が達成しようとしていることを簡単に説明させてください。

ユーザーがフォームに記入し、送信時に jQuerys $.post メソッドを使用してすべてのデータを送信し、Laravel 5.1 と Intervention API( http://image.intervention.io/ ) を使用してデータを処理したい画像をサーバー上の正しいディレクトリにアップロードします。

私のデータはサーバー(ローカル)に送信され、Laravels Input クラスを使用してすべてを読み取ることができます。問題は介入の使用方法にあると思いますが、確信が持てません。

これがフォームに関連するJSです(無関係なコードを削除しました):

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

var State = {
    CurrentCategorySelected: 1
}

var URIROOT = '/administrator/';

$(document).on('click', '.ModalSave', function(e)
{   
  var fd = new FormData( $('.ProductForm').get(0) ),
        action = $(this).attr('data-saving');

    fd.append('category_id', State.CurrentCategorySelected);

    $.ajax({
        url: URIROOT+"new_product",
        type: "POST",
        data: fd,
        processData: false,
        contentType: false,
        success: function(response) {
            console.log(response);
        },
        error: function(jqXHR, textStatus, errorMessage) {
            console.log(errorMessage); 
        }
    }); 

    e.preventDefault();
});

このJSは問題なく動作しているようですが、データの出所がわかるように投稿すると思いました。

次に、私の Laravel ルートは次のとおりです。

Route::post('new_product', 'Admin\ProductManagerController@saveNewProduct');

また、コントローラー内の関連する PHP は次のとおりです (無関係なコードを削除しました)。

    <?php namespace TottonTimber\Http\Controllers\Admin;

    use View;
    use Image;
    use Input;
    use DB;
    use Illuminate\Http\Request;
    use TottonTimber\Http\Requests;
    use TottonTimber\Http\Controllers\Controller;
    use TottonTimber\Category;
    use TottonTimber\Product;

  class ProductManagerController extends Controller {
    public function saveNewProduct() 
    {
        /*
         * Define Varibles
         */
        $input = Input::all();
        $image = Input::file('main_image');
        $image_name = time().$image->getClientOriginalName();
        $imageDir = public_path('img/catalogue/products/' . $image_name);
        $imageDirSmall = public_path('img/catalogue/products/small_thumbs/' . $image_name);
        $imageDirMedium = public_path('img/catalogue/products/medium_thumbs/' . $image_name);
        $imageDirLarge = public_path('img/catalogue/products/large_thumbs/' . $image_name);
        /*
         * Save the Image and all of its resized siblings
         */     
        Image::make($image->getRealPath())->save($imageDir);    
        Image::make($image->getRealPath())->resize(null, 100, function ($constraint) {
                $constraint->aspectRatio();
            })->save($imageDirSmall);
        Image::make($image->getRealPath())->resize(null, 200, function ($constraint) {
                $constraint->aspectRatio();
            })->save($imageDirMedium);
        Image::make($image->getRealPath())->resize(null, 400, function ($constraint) {
                $constraint->aspectRatio();
            })->save($imageDirLarge);

        /*
         * Create a new entry in the database for the new product
         */
        $product = new Product;                       
        $product->description = $input['description'];    
        $product->content = $input['content'];      
        $product->price = $input['price'];      
        $product->product_code = $input['code'];    
        $product->main_image = $image_name;
        $product->status = 'enabled';
        $product->save();

        /*
         * Create the Relationship to its category
         */
        DB::table('category_product')->insert([
            'category_id' => $input['category_id'],
            'product_id' => $product->id
        ]);
    }
  }

最初の「Image::make ..」関数が実行される場所でコードが壊れるので、これが間違ったデータを渡しているためなのか、それとも何なのかわかりません。

出力を確認できるように、いくつかのものを var_dump すると、次のようになります。

$image

object(Symfony\Component\HttpFoundation\File\UploadedFile)#27 (7) {
  ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  bool(false)
  ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  string(23) "22mm Sawn Whitewood.jpg"
  ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  string(24) "application/octet-stream"
  ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  int(0)
  ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
  int(1)
  ["pathName":"SplFileInfo":private]=>
  string(0) ""
  ["fileName":"SplFileInfo":private]=>
  string(0) ""
}

$image->getRealPath()

string(52) "C:\Users\alex\Documents\websites\TottonTimber\public"

$imageDir

string(109) "C:\Users\alex\Documents\websites\TottonTimber\public/img/catalogue/products/143869677322mm Sawn Whitewood.jpg"

私が間違っているのは何ですか?

4

0 に答える 0