返回视图在Laravel 5.4中不变量

时间:2017-06-14 09:35:51

标签: php laravel laravel-5

也许是愚蠢的问题,但我在我的控制器中有这个显示图像上传的表单,并且在提交表单后应该返回到另一个视图。

在另一个视图中,我传递了所有图像的变量,但我仍然有

  

未定义的变量:图像

所以这就是我在控制器中的内容

// Display all Images
public function images()
{
    $images = Images::paginate(3);
    return view('images', compact('images'));
}

// Display image upload form
public function imageCreate()
{
    return view('create');
}

// Submit and store image
public function imageStore( Request $request )
{
    $image = new Images([
      'caption' => $request['caption'],
      'name' => $request['caption'],
      'path' => 'uploads/noimage.png',
      'hits' => 1,
      'added_on' => '2017-08-08 9:00:00'
    ]);

    $image->save();
    return view('images', compact('images'));
}

在我看来images.blade.php

@foreach($images as $image)

   <a href="{{ URL::to('image/'.$image->slug) }}"><img class="thumbnail block" src="{{ '../'.$image->path }}"></a>

@endforeach

那么,如果我在变量视图语句中发布变量,为什么变量是未定义的?

更新:视图返回中的dd($ image)

Images {#234 ▼
  #primaryKey: "id"
  #table: "images"
  +timestamps: false
  +fillable: array:6 [▶]
  #connection: null
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: true
  #attributes: array:7 [▼
    "caption" => "dasdsadsad"
    "name" => "dasdsadsad"
    "path" => "uploads/noimage.png"
    "hits" => 1
    "added_on" => "2017-08-08 9:00:00"
    "slug" => "dasdsadsad-7"
    "id" => 144
  ]
  #original: array:7 [▶]
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #events: []
  #observables: []
  #relations: []
  #touches: []
  #hidden: []
  #visible: []
  #guarded: array:1 [▶]
}

更新2:路线

Route::get('images', 'HomeController@images'); 
Route::get('create',['as'=>'create','uses'=>'HomeController@imageCreate']); 
Route::post('create',['as'=>'store','uses'=>'HomeController@imageStore']); 

3 个答案:

答案 0 :(得分:2)

问题在于:

compact('images'));

但您的变量为$image。所以改成它:

compact('image'));

然后再试一次。并且还更改foreach()变量名称,如:

@foreach($image as $img)
...
$img->slug
$img->path

说明:

包含数据的变量是$image,而从控制器传递的变量是compact('images'))。那里有一个额外的s

passing-data-from-controller-to-views

答案 1 :(得分:0)

此行中的错误

return view('images', compact('images'));

您的变量名称为$image,并且您传递了$images

用这个替换上面的

return view('images', compact('image'));
public function imageStore( Request $request )
{
    $image = new Images([
      'caption' => $request['caption'],
      'name' => $request['caption'],
      'path' => 'uploads/noimage.png',
      'hits' => 1,
      'added_on' => '2017-08-08 9:00:00'
    ]);
    $imagePath='uploads/noimage.png';
    $image->save();
    return view('images')->with('image',$imagePath);
}

你得到这样的路径

<a href="{{ URL::to('image/'.$image->slug) }}">
 <img class="thumbnail block" src="{{url('/'.$image)}}">
</a>

答案 2 :(得分:0)

Laravel假设您使用紧凑函数时,您传递的变量的名称与您在路径中传递的变量的名称相同。例如:

route::get('/customer/{customer_id}', 'CustomerController@show');

因此,在您的控制器中,当您使用视图返回数据时,您需要执行以下操作:

return view('customer', ['customer_name' => $customer->name]);

然后你应该能够在你的视图中引用它,如:

{{$customer_name}}