0
我有我的laravel的網店,我有這樣的產品功能屬性,我需要創建多個屬性,但我有一個錯誤象下面這樣:Laravel多個屬性創建
「ErrorException(E_WARNING) HELP 的preg_replace ():參數不匹配,模式是一個字符串,而更換一個數組」
我在這裏要分享我的整個MVC結構可以請人找到一個解決方案來解決這個錯誤,在此先感謝,
我控制器:
public function store()
{
$attribute_values = Input::all();
$attribute_price_values = Input::get('price');
$image = Input::file('image');
$attribute_id = Input::get('attribute_id');
if($attribute_id <= 0) {
return Redirect::back();
}
$attributes_data = Attribute::where('id', '=', $attribute_id)->get(array('price_mode'))->toArray();
$attr_price = $attributes_data[0];
foreach($attribute_values as $k => $v) {
$insert_data = new AttributeValues;
$insert_data->attribute_id = $attribute_id;
$data_validation['attribute_id'] = $insert_data->attribute_id;
$insert_data->value = $v;
$data_validation['value'] = $insert_data->value;
$validator = Validator::make($data_validation, AttributeValues::$rules);
if ($validator->fails()) {
$messages = $validator->messages();
return Redirect::back()->withErrors($validator)->withInput();
} else{
//check the price flag
//upload image in directory
// $attribute_value_image = $image[$k];
if(isset($attribute_value_image) && $attribute_value_image != '') {
$filename = time(). '_' .$attribute_value_image->getClientOriginalName();
if (!file_exists(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'original' . DIRECTORY_SEPARATOR .
$insert_data->attribute_id)) {
mkdir(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'original' . DIRECTORY_SEPARATOR .
$insert_data->attribute_id, 0777, true);
}
if (!file_exists(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'small' . DIRECTORY_SEPARATOR .
$insert_data->attribute_id)) {
mkdir(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'small' . DIRECTORY_SEPARATOR .
$insert_data->attribute_id, 0777, true);
}
$original_image = Image::make($attribute_value_image->getRealPath())->save(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'original' . DIRECTORY_SEPARATOR . $insert_data->attribute_id. DIRECTORY_SEPARATOR . $filename);
$resized_small_image = Image::make($attribute_value_image->getRealPath())->resize(120, 44)->save(public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'small' . DIRECTORY_SEPARATOR . $insert_data->attribute_id . DIRECTORY_SEPARATOR . $filename);
$fileFrom = public_path() . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'attribute_values' . DIRECTORY_SEPARATOR . 'original' . DIRECTORY_SEPARATOR .
$insert_data->attribute_id . DIRECTORY_SEPARATOR . $filename;
$insert_data->image = $filename;
}
if($attr_price['price_mode'] == 'Common') {
$insert_data->price = $attribute_price_values[$k];
}
$insert_data->save();
}
}
if(Input::get('stay') == 1){
return Redirect::back();
} else {
return Redirect::route('backend.attribute_values.index');
}
}
我的模型:
<?php
class AttributeValues extends \Eloquent {
protected $table = 'attribute_values';
protected $fillable = ['attribute_id','value', 'image', 'price','color'];
public static $rules = array(
'attribute_id' => 'required',
'value' => 'required',
);
public static $pricerules = array(
'value' => 'required',
'price' => 'required|regex:/^\d*(\.\d{2})?$/'
);
public static $edit_rules = array(
'value' => 'required'
);
public function attribute(){
return $this->belongsTo('Attribute');
}
}
筆者認爲:
@extends('layouts.backend')
@section('content')
<div class="row">
<div class="col-xs-12">
<div class="box">
<div class="box-header">
<i class="fa fa-cogs"></i>
<h3 class="box-title">Add Attribute Values</h3>
<div class="box-tools pull-right" data-toggle="tooltip" title="" data-original-title="Go Back">
<li class="pull-right"><a href=" {{URL::route('backend.attribute_values.index')}}" class="text-muted"><i class="fa fa-chevron-left"></i> Go Back</a></li>
</div>
</div>
{{ Form::model($attribute_values, ['route' => ['backend.attribute_values.create'], 'method' => 'post', 'enctype' => 'multipart/form-data']) }}
<div class="box-body">
@if ($errors->all() != null)
<ul class="error">
@foreach($errors->all() as $err)
<li>{{$err}}</li>
@endforeach
</ul>
@endif
<?php
$attributes[0] = '';
foreach($attribute_names as $attribute_name) {
$attributes[$attribute_name->id] = $attribute_name->group_name.' > '.$attribute_name->name;
$attribute_js_names[$attribute_name->id] = $attribute_name->price_mode;
$attribute_js_price_val[$attribute_name->id] = $attribute_name->price_value;
}
?>
<div class="form-group">
<table class="table table-bordered table-hover" id="tab_logic">
<tr id='addr0'>
<td>{{ Form::label('attribute_id', 'Attrbute Name*',array('data-toggle'=>"tooltip", 'data-original-title'=>"Attribute Type is required")) }}</td>
<td colspan="3">{{ Form::select('attribute_id', $attributes, null, array('class'=> 'ShowHidePrice')) }} {{ Form::hidden('sel_attribute_name', 'false', array('id'=>'sel_attribute_name')) }} {{ Form::hidden('sel_attribute_pval', 'Fixed', array('id'=>'sel_attribute_pval')) }}</td>
</tr>
<tr id='addr3'>
<td>
{{ Form::label('color[]', 'Attribute Value 1',array('data-toggle'=>"tooltip", 'data-original-title'=>"Value for selected attribute")) }}
</td>
<td>
{{ Form::label('color', 'Color:',array('data-toggle'=>"tooltip", 'data-original-title'=>"Color is required")) }}
{{ Form::input('color','color[]',null, array('class' => 'form-control-color','placeholder' => 'Enter Color','id' => 'exampleInputTitle1')) }}
</td>
<td class="attribute_price">
<span class="valpricesym"></span> {{ Form::text('price[]',null, array('class' => 'form-control form-control-extend','placeholder' => 'Enter Price for Attribute Value')) }} <span class="valpriceper"></span>
</td>
</tr>
<tr id='addr1'>
<td>
{{ Form::label('value', 'Attribute Value 1',array('data-toggle'=>"tooltip", 'data-original-title'=>"Value for selected attribute")) }}
</td>
<td>
{{ Form::text('value[]',null, array('class' => 'form-control','placeholder' => 'Enter Attribute Value')) }}
</td>
<td>
{{ Form::file('image[]') }}
</td>
<td class="attribute_price">
<span class="valpricesym"></span> {{ Form::text('price[]',null, array('class' => 'form-control form-control-extend','placeholder' => 'Enter Price for Attribute Value')) }} <span class="valpriceper"></span>
</td>
</tr>
<tr id='addr2'></tr>
</table>
</div>
<div class="form-group">
<a id="add_row" class="btn btn-default pull-left">Add Row</a>
<a id='delete_row' class="pull-right btn btn-default">Delete Row</a>
</div>
<div class="form-group"> </div>
<div class="box-footer">
{{ Form::button('Submit',array('class'=>'btn btn-primary','value' => '0', 'name' => 'stay', 'type' => 'submit')) }}
{{ Form::button('Save & Stay',array('class'=>'btn btn-primary','value' => '1', 'name' => 'stay', 'type' => 'submit')) }}
</div>
</div>
</div>
</div>
</div>
{{ Form::close() }}
@stop
@section('javascript')
$(document).ready(function(){
var i=2;
var jsrr = new Array();
var jspv = new Array();
<?php
foreach($attribute_js_names as $k => $v) {
echo 'jsrr['.$k.']="'.$v.'";';
echo 'jspv['.$k.']="'.$attribute_js_price_val[$k].'";';
//echo '\n';
}
?>
//alert(jsrr.length)
$("#add_row").click(function(){
var price_fld_vis = $('#sel_attribute_name').val();
if(price_fld_vis == 'true') {
dis_play = 'block';
} else {
dis_play = 'none';
}
var colors = $('#attribute_id').val();
if(colors == 2){
new_row = '<td><label data-original-title="Value for selected attribute" data-toggle="tooltip" for="value">Attribute Value '+(i)+'</label></td><td><input name="color[]" type="color" class="form-control-color"></span></td><td class="attribute_price" style="display:'+dis_play+'"><span class="valpricesym"></span>';
}else{
new_row = '<td><label data-original-title="Value for selected attribute" data-toggle="tooltip" for="value">Attribute Value '+(i)+'</label></td><td><input type="text" name="value[]" placeholder="Enter Attribute Value" class="form-control"></td><td><input name="image[]" type="file"></td><td class="attribute_price" style="display:'+dis_play+'"><span class="valpricesym"></span> <input type="text" name="price[]" placeholder="Enter Price for Attribute Value" class="form-control form-control-extend"> <span class="valpriceper"></span></td>';
}
$('#addr'+i).html(new_row);
i++;
$('#tab_logic').append('<tr id="addr'+i+'"></tr>');
updateCurrency();
});
$("#delete_row").click(function(){
if(i>2){
$("#addr"+(i-1)).html('');
i--;
}
});
$(".ShowHidePrice").bind("change", function() {
//alert('calling...');
var curval = $(this).val();
if(jsrr[curval] == 'Common') {
$('.attribute_price').show();
attr_flag = 'true';
} else {
$('.attribute_price').hide();
attr_flag = 'false';
}
attr_pval = jspv[curval]
$('#sel_attribute_name').val(attr_flag);
$('#sel_attribute_pval').val(attr_pval);
updateCurrency();
});
function updateCurrency()
{
var pval_fld = $('#sel_attribute_pval').val();
if(pval_fld == 'Fixed') {
curr_sym = '£'
val_sym = ''
} else {
curr_sym = ''
val_sym = '%'
}
$('.valpriceper').html(val_sym);
$('.valpricesym').html(curr_sym)
}
});
$("#addr3").hide();
$("#addr1").show();
$('#attribute_id').change(function(){
if($(this).val() == 2){
$("#addr3").show();
$("#addr1").hide();
}else{
$("#addr3").hide();
$("#addr1").show();
}
});
@stop
我在這裏使用attribute_id = 2,這是使用一些jQuery來隱藏顏色屬性,並顯示在屬性ID將是2顏色屬性,所以總是顯示錯誤,如 「ErrorException(E_WARNING) HELP preg_replace():參數不匹配,模式是字符串,而替換是數組」