Как я могу избежать изображения, требуемого в форме редактирования, если изображение существует в laravel?

Я добавляю и редактирую пользователя с той же функцией (Магазин), когда я добавляю пользователя, он запрашивает у меня изображение, но всякий раз, когда я редактирую пользователя, у которого есть изображение, он также спрашивает, требуется ли изображение, и я хочу, если изображение уже есть Представьте, что меня не спросят, пожалуйста, посмотрите мой код выше, я недавно изменил свой код в соответствии с Gurpal Singh

In my controller
                                 

        public function rules()
{
                $child_details = Children::findOrFail($inputs['id']);
    $rules =  [
       'child_name' => 'required',
                   'gender' => 'required',
                   'dob' => 'required',
                   'current_class' => 'required',
                    'b_group' => 'required',
                    'm_tongue' => 'required', 
                    'image' => 'image',
         ];

    if ($child_details->notHavingImageInDb()){
        $rules['image'] = 'required|image';
    }
    return $rules;
 }
 
 public function Postchild(Request $request)
    {

            $data =  \Input::except(array('_token')) ;
             $validator = \Validator::make($data,$rules);
             $inputs = $request->all();
             if ($validator->fails())
            {
                    return redirect()->back()->withInput()->withErrors($validator->messages());
            }
          
              if (!empty($inputs['id'])){
                $child_details = Children::findOrFail($inputs['id']);
            }else{
                $child_details = new Children;
            }


           $child_details->parent_id = Auth::User()->id;
           $child_details->child_name = $inputs['child_name'];

           $child_image = $request->file('image');

        if ($child_image){

            $tmpFilePath = 'uploads/childrens/';
             $extension =   $child_image->getClientOriginalExtension();
            $hardPath =  str_slug($inputs['child_name'], '-').'-'.md5(time());


            $img = Image::make($child_image);

            //$img->resize(180)->save($tmpFilePath.$hardPath.'-b.jpg');
            $img->fit(250, 250)->save($tmpFilePath.$hardPath.'.'.$extension);

            $child_details->image = $hardPath.'.'.$extension;

        }
         
            $child_details->save();

       
  if (!empty($inputs['id'])){


                return \Redirect()->route('child_list')->with('success', 'Child has been updated');


        }else{

                return \Redirect()->route('child_list')->with('success', 'Child has been added');


        }    

    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
1 202
5

Ответы 5

Обычно вы можете сделать следующее:

$rule = array(
    'name' => 'required',
   );

if (!empty($inputs['id'])) {
    $user = User::findOrFail($inputs['id']);
} else {
    $rule["image"] = "required";
    $user = new User;

}

У меня такая же проблема, требуется изображение .. после подачи заявки, как вы сказали

ravi 16.01.2019 07:59

сделано, как вы сказали, но когда я добавляю нового пользователя, он не запрашивает у меня требуемое изображение

ravi 16.01.2019 08:10

Я хочу, чтобы изображение требовалось при добавлении нового пользователя и при редактировании, если у пользователя есть изображение, в нем не требуется проверка изображения

ravi 16.01.2019 08:11

Вы можете использовать правила условного добавления, не имея изображения в базе данных

Add this in model

public function notHavingImageInDb()
{
    return (empty($this->image))?true:false;
}

Это запрос правила проверки

public function rules()
{
    $user = User::find(Auth::id());
    $rules =  [
       'name' =>'required|max:100',
        'image' =>'image',
         ];

    if ($user->notHavingImageInDb()){
        $rules['image'] = 'required|image';
    }
    return $rules;
 }

Не забудьте импортировать аутентификацию и модель пользователя т.е.

 use App\User;
 use Auth;

подробнее нажмите здесь

где я должен добавить код общедоступной функции rules () в мою пользовательскую модель ??

ravi 16.01.2019 08:30

Это обычный почтовый запрос, в который вы хотите отправить почтовый запрос.

Gurpal singh 16.01.2019 09:03

Могу ли я использовать его над моей почтовой функцией

ravi 16.01.2019 09:27

Как вы сказали, я сделал, проверьте, пожалуйста, мой вопрос выше, я получаю неопределенную ошибку правил переменной

ravi 16.01.2019 09:54

какая у вас версия laravel?

Gurpal singh 16.01.2019 10:26

Лучше их разделить или просто создать другую функцию. Но вы можете поставить оператор if, который указывает, есть ли изображение в запросе или нет.

Нравится:

    if (! isset($data['image'])){ //if the image is not in the request

          //Your code          

    }
    else{ //if the image is in the request

         //Your code

    }

Если вам нужен код для хранения, переименования, перемещения изображения, не стесняйтесь запрашивать.

Моя версия laravel - 5.2

ravi 16.01.2019 10:27

не могли бы вы прислать мне код на [email protected]

ravi 16.01.2019 11:07

проверить свой почтовый ящик

Hassan Inter 16.01.2019 12:43

Спасибо .. я попробую, как вы сказали

ravi 16.01.2019 12:53

Вы можете использовать хук проверки после.

public function Postchild(Request $request)
{

   //Define your rules
   $rules =  [
           'child_name' => 'required',
           'gender' => 'required',
           'dob' => 'required',
           'current_class' => 'required',
           'b_group' => 'required',
           'm_tongue' => 'required', 
         ];

  //Validate your data       
  $data = $request->except('_token');
  $validator = \Validator::make($data,$rules);


  $validator->after(function ($validator) {

    //Check the mode of request (Create or Update)
    if (!empty($data['id'])){
        $child_details = Children::findOrFail($data['id']);
        if ($child_details->image == null){
          $validator->errors()->add('image', 'Image field is required');
        }
    }
  });
  if ($validator->fails()) {
  return redirect()->back()
  ->withErrors($validator)
  ->withInput();
  }
}

Только эти несколько строк могут решить ваши проблемы ... Вы должны проверить, есть ли изображение.

Правила в частной или защищенной функции

  private function validateRequest($request)
     {
        //This is for Update without required image, this will check that In DB image have or not

        $child_image = Children::find($request->id);
        $rules = [];
        if ($child_image) :
          if ($child_image->image == null):
             $rules['image'] = 'required|image|max:1999';
          endif;



        //This is for regular validation
        else :
          $rules = [
              'image' => 'required|image|max:1999',
           ];
       endif;
         return $rules;
}

Другие вопросы по теме