Jquery 如何在yii2中使用单个操作更新将存储在不同表中的多个映像
在此更新操作代码中,仅更新文件夹上的数据和upadte映像,但不更新另一个表tabl4e映像Jquery 如何在yii2中使用单个操作更新将存储在不同表中的多个映像,jquery,yii2,image-uploading,Jquery,Yii2,Image Uploading,在此更新操作代码中,仅更新文件夹上的数据和upadte映像,但不更新另一个表tabl4e映像 public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { if ($model->validate()) {
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
if ($model->validate()) {
$model->save();
$cid = $model->id;
if (isset($_FILES['attr_name']['tmp_name'])) {
$photos = UploadedFile::getInstancesByName('attr_name');
$imgName = array();
if (isset($photos) && count($photos) > 0) {
$DD = 0 ;
foreach ($photos as $image => $pic) {
$imagepath = Yii::getAlias('@image').'/';
$imageFileName = rand(10, 100).$pic->name;
$imageFile = $imagepath.$imageFileName;
if ($pic->saveAs($imageFile)) {
$imgName[] = $imageFileName;
} else {
//echo 'Cannot upload!';
}
$Image = new Image();
$Image->c_id = $cid;
$Image->image = $imageFileName;
$img = $Image->image;
if (isset($_POST['deletedImg'])) {
$pics = $_POST['deletedImg'];
foreach ($pics as $img1) {
$image = $img1;
unlink(Yii::getAlias('@image').'/'.$image);
}
} else {
$Image->image = $img;
}
if ($Image->validate()) {
$Image->save();
} else {
print '<pre>';
print_r($Image->errors);
exit;
}
unset($Image);
}
}
return $this->redirect(['view', 'id' => $model->id]);
}
} else {
return $this->render('create', [
'model' => $model,
]);
}
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
公共功能操作更新($id)
{
$model=$this->findModel($id);
如果($model->load(Yii::$app->request->post())和(&$model->save()){
如果($model->validate()){
$model->save();
$cid=$model->id;
如果(isset($\u文件['attr\u name']['tmp\u name'])){
$photos=上传文件::getInstanceByName('attr_name');
$imgName=array();
如果(设置($photos)和计数($photos)>0){
$DD=0;
foreach($image=>$pic形式的照片){
$imagepath=Yii::getAlias(“@image”)。/”;
$imageFileName=rand(10100)。$pic->name;
$imageFile=$imagepath.$imageFileName;
如果($pic->saveAs($imageFile)){
$imgName[]=$imageFileName;
}否则{
//echo'无法上传!';
}
$Image=新图像();
$Image->c_id=$cid;
$Image->Image=$imageFileName;
$img=$Image->Image;
如果(isset($_POST['deletedImg'])){
$pics=$_POST['deletedImg'];
foreach($pics作为$img1){
$image=$img1;
取消链接(Yii::getAlias(“@image”)./“$image);
}
}否则{
$Image->Image=$img;
}
如果($Image->validate()){
$Image->save();
}否则{
打印“”;
$(".removeBtn").click(function(event){
var img =$(this).attr("data-id");
var id = $(this).attr('id');
var hiddenfield= '<input type="hidden" value="'+img+'" name="deletedImg[]" id=""/>';
$("#deleted-img").append(hiddenfield);
$(this).parent().parent().remove();
});
$(".btnAddRec").click(function(){
var clonedHTML = $( "#fieldsRow" ).html();
clonedHTML = clonedHTML.replace("<!--BUTTON-->",'<button type="button" class="removeBtn btn btn-xs btn-danger"><i class="glyphicon glyphicon-trash"></i> Delete</button>');
$("#cloned").append('<div class="row" id="fieldsRow">'+clonedHTML+'</div>');
$(".removeBtn").click(function(event){
$(this).parent().parent().remove();
});
$("#cloned #fieldsRow:last-child input ").val('');
});
打印($Image->errors);
出口
}
未设置($图像);
}
}
返回$this->redirect(['view','id'=>$model->id]);
}
}否则{
返回$this->render('create'[
'model'=>$model,
]);
}
}否则{
返回$this->render('update'[
'model'=>$model,
]);
}
}
jQuery
在这段代码中会得到多个文件按钮并存储和删除多个图像,我得到的是删除图像id,如何在更新操作中使用这个id,我没有任何想法
namespace app\models;
use yii\base\Model;
use yii\web\UploadedFile;
class UploadForm extends Model
{
/**
* @var UploadedFile[]
*/
public $imageFiles;
public function rules()
{
return [
[['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4],
];
}
public function upload()
{
if ($this->validate()) {
foreach ($this->imageFiles as $file) {
$file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
}
return true;
} else {
return false;
}
}
}
$(“.removeBtn”)。单击(函数(事件){
var img=$(this.attr(“数据id”);
var id=$(this.attr('id');
var hiddenfield='';
$(“#删除的img”).append(hiddenfield);
$(this.parent().parent().remove();
});
$(“.btnAddRec”)。单击(函数(){
var clonedHTML=$(“#fieldsRow”).html();
clonedHTML=clonedHTML.replace(“,”Delete');
$(“#克隆”).append(“”+clonedHTML+“”);
$(“.removeBtn”)。单击(函数(事件){
$(this.parent().parent().remove();
});
$(“#克隆#字段箭头:最后一个子输入”).val(“”);
});
您确实应该首先开始重构代码
例如,您尝试删除循环中的图像,每次迭代上载的图像;将图像文件名多次指定给图像模型属性,反之亦然,还有未使用的变量($DD
?)以及可能更多的变量
但我建议你先看看官方文件。这个用例甚至有一个代码示例:
高级方法:创建一个专用的多图像上传表单(模型),并在此处添加所有上传逻辑
从示例中复制:
模型上传表单
<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>
<button>Submit</button>
<?php ActiveForm::end() ?>
查看(HTML表单)
编辑此项以添加jQuery脚本
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;
class SiteController extends Controller
{
public function actionUpload()
{
$model = new UploadForm();
if (Yii::$app->request->isPost) {
$model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
if ($model->upload()) {
// file is uploaded successfully
return;
}
}
return $this->render('upload', ['model' => $model]);
}
}
公共功能操作更新($id)
{
$model=$this->findModel($id);
如果($model->load(Yii::$app->request->post()){
如果($model->validate())
{
$model->save();
$cid=$model->id;
$Image=Image::find()->where(['c_id'=>$cid])->asArray()->all();
如果(!空($Image)){
如果(isset($_文件['attr_name']['tmp_name'])>0){
如果(isset($_POST['deletedImg']))
{
$pics=$_POST['deletedImg'];
//回显“;打印($pics);退出;
foreach($pics作为$img1)
{
$image=$img1;
取消链接(Yii::getAlias(“@image”)./“$image);
}
$connection=\Yii::$app->db;
$delRec=$connection->createCommand(“从图像中删除图像,其中图像='$image'”);
$delRecExec=$delRec->query();
}
$photos=上传文件::getInstanceByName('attr_name');
$imgName=array();
如果(设置($photos)和计数($photos)>0)
{
foreach($image=>$pic形式的照片){
$imagepath=Yii::getAlias(“@image”)。/”;
$imageFileName=rand(10100)。$pic->name;
$imageFile=$imagepath.$imageFileName;
如果($pic->saveAs($imageFile))
{
$imgName[]=$imageFileName;
}
其他的
{
//echo'无法上传!';
}
$Image=新图像();
//打印($Image);退出;
$Image->c_id=$cid;
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
if($model->validate())
{
$model->save();
$cid = $model->id;
$Image = Image::find()->where(['c_id' => $cid])->asArray()->all();
if(!empty($Image)){
if(isset($_FILES['attr_name']['tmp_name']) > 0){
if(isset($_POST['deletedImg']))
{
$pics = $_POST['deletedImg'];
// echo "<pre>";print_r($pics);exit;
foreach($pics as $img1)
{
$image = $img1;
unlink(Yii::getAlias('@image').'/'.$image);
}
$connection = \Yii::$app->db;
$delRec = $connection->createCommand(" delete image FROM image WHERE image='$image'");
$delRecExec = $delRec->query();
}
$photos = UploadedFile::getInstancesByName('attr_name');
$imgName = array();
if(isset($photos) && count($photos) > 0)
{
foreach ($photos as $image => $pic) {
$imagepath = Yii::getAlias('@image').'/';
$imageFileName = rand(10,100).$pic->name;
$imageFile = $imagepath.$imageFileName;
if ($pic->saveAs($imageFile))
{
$imgName[] = $imageFileName;
}
else
{
//echo 'Cannot upload!';
}
$Image = new Image();
// print_r($Image);exit;
$Image->c_id = $cid;
$Image->image = $imageFileName;
$img = $Image->image;
if($Image->validate()){
$Image->save();
}else{
print '<pre>';print_r($Image->errors);
exit;
}
unset($Image);
}
}
return $this->redirect(['view', 'id' => $model->id]);
}
}
}
else
{
return $this->render('create', [
'model' => $model,
]);
}
} else {
return $this->render('update', [
'model' => $model,
]);
}
}