我已经构建了一个简单的应用程序laravel 4.我有脚手架设置添加帖子似乎工作正常。我已经设置了Stapler和图片上传包。当我设置使用单张图片上传时,它非常好,它的魅力。我最近查看了文档here
它声明你可以进行多次上传,所以我按照文档中的说明去做。这是我的编码页面:
Post.php模型:
<?php
class Post extends Eloquent {
use Codesleeve\Stapler\Stapler;
protected $guarded = array();
// A user has many profile pictures.
public function galleryImages(){
return $this->hasMany('GalleryImage');
}
public static $rules = array(
'title' => 'required',
'body' => 'required'
);
public function __construct(array $attributes = array()) {
$this->hasAttachedFile('picture', [
'styles' => [
'thumbnail' => '100x100',
'large' => '300x300'
],
// 'url' => '/system/:attachment/:id_partition/:style/:filename',
'default_url' => '/:attachment/:style/missing.jpg'
]);
parent::__construct($attributes);
}
}
PostsController.php
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
$input = Input::all();
$validation = Validator::make($input, Post::$rules);
if ($validation->passes())
{
$this->post->create($input);
return Redirect::route('posts.index');
}
$post = Post::create(['picture' => Input::file('picture')]);
foreach(Input::file('photos') as $photo)
{
$galleryImage = new GalleryImage();
$galleryImage->photo = $photo;
$user->galleryImages()->save($galleryImage);
}
return Redirect::route('posts.create')
->withInput()
->withErrors($validation)
->with('message', 'There were validation errors.');
}
这也保存了功能和其他功能。
要在后期控制器中使用的GalleryImage.php图库模型
<?php
class GalleryImage extends Eloquent {
protected $guarded = array();
public static $rules = array();
public function __construct(array $attributes = array()) {
$this->hasAttachedFile('photo', [
'styles' => [
'thumbnail' => '300x300#'
]
]);
parent::__construct($attributes);
}
// A gallery image belongs to a post.
public function post(){
return $this->belongsTo('Post');
}
}
我的create.blade.php模板发布帖子
@extends('layouts.scaffold')
@section('main')
<h1>Create Post</h1>
{{ Form::open(array('route' => 'posts.store', 'files' => true)) }}
<ul>
<li>
{{ Form::label('title', 'Title:') }}
{{ Form::text('title') }}
</li>
<li>
{{ Form::label('body', 'Body:') }}
{{ Form::textarea('body') }}
</li>
<li>
{{ Form::file('picture') }}
</li>
<li>
{{ Form::file( 'photo[]', ['multiple' => true] ) }}
</li>
<li>
{{ Form::submit('Submit', array('class' => 'btn btn-info')) }}
</ul>
{{ Form::close() }}
@if ($errors->any())
<ul>
{{ implode('', $errors->all('<li class="error">:message</li>')) }}
</ul>
@endif
@stop
当我发布单个附加图像的表单并保存到数据库并且它有效,但是当我保存多个图像上传时,我收到此错误:
ErrorException
preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
我的文件要点中的完整堆栈跟踪是here
有人能指出我为什么会发生这种错误。根据我的研究,它创建了一个需要展平的多维数组,但我不确定这是否属实。
我多年来一直在用砖头撞墙。
答案 0 :(得分:8)
问题是,当您提交多个图像时,它会变成图片数组而不是单个字符串。所以它试图将数组保存到数据库而不是它期望的字符串。如果你这样做你的照片变量是一个json_encoded图片数组,那么你应该能够保存它们。
希望这有帮助。