نمایش خطای validate در app.blade

مصطفی عباس
30 مرداد ۱۴۰۰
سلام.بازم ممنونم ازتون بابت اموزش خوبتون. سوالم اینه که چطور میشه خطای validate رو در لایوت مادر که app.blade.php هست نشون داد؟! میخام یه کد کلی بنویسم که دیگه دوباره نویسی نشه تک تک هم نیاره. اگه ارور داشت اتوماتیک نشون بده. @if ($errors->any())
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif با سپاس
1750

7 پاسخ
  • قاسم بساکی30 مرداد ۱۴۰۰

    سلام خدمت شما دوست عزیز و ممنون بابت نظر مثبتتون

    برای نمایش ارور validation ما از پراپرتی ها (متغیر های public) استفاده می کنیم که هر پراپرتی در خود اون کامپوننت و در صفحه blade خود اون کامپوننت شناسایی میشه . و به اون روشی که در آموزش گفتیم نمیشه در لایه اصلی نمایش داد.

    public function submit()
    {
        $validator = Validator::make(
            [
                'name'  => $this->name,
                'email' => $this->email,
            ],
            [
                'name'  => 'required|min:6',
                'email' => 'required|email',
            ]
        );
    
        if ($validator->fails()) {
            session()->flash('custom_message', 'Oops! Something went wrong...');
        } 
        
        $validator->validate();
    }

    اگر به این روش بالا ولیدیت رو انجام بدید می تونید یک ارور در سشن ست کنید و اون رو در هرجایی نمایش میدید

  • قاسم بساکی30 مرداد ۱۴۰۰

    و با این دستور نمایش بدید

    @if (session()->has('custom_message'))
    	<h4 >
        	{{session('custom_message')}}
    	</h4>
    @endif
  • قاسم بساکی30 مرداد ۱۴۰۰


    فکر کنم بشه اینطوری هم سشن رو ست کرد - تست کنید.

    session()->flash($validator->errors());

    به هر ترتیب نظر بنده اینه که باید با استفاده از سشن ، ارور رو ست کنید و در صفحه بلید ، اون رو از سشن دریافت کنید. که همه مربوط به لاراول میشه و من در لایووایر همچین چیزی ندیدم .

    امیدوارم پاسخ ها به کارتون بیاد

  • مصطفی عباس6 شهريور ۱۴۰۰

    سلام 

    ممنون از جوابتون. 

    سشن جواب نداد

  • قاسم بساکی6 شهريور ۱۴۰۰

    سلام خدمت شما دوست عزیزم 

    مطمئن هستید که درست انجام دادید؟

    شما هرجایی که میخواهید ارور نمایش داده بشه این کد استفاده می کنید

    @if (session()->has('custom_message'))
    	<h4 >
        	{{session('custom_message')}}
    	</h4>
    @endif

    و به این شکل سشن ست می کنید

    session()->flash('custom_message', 'Oops! Something went wrong...');

    این لینک هم یک نگاه بندازید

    https://laravel-livewire.com/docs/2.x/flash-messages
  • مصطفی عباس7 شهريور ۱۴۰۰

    با سشن نشد

    ولی با روشهای مختلفی میشه اینکارو کرد.

    اولین روشی که کامل جواب داد و میتونی کلی پارامتر هر جایی که دلت خواست بفرستی دستور emit هست

     

    کامپوننت messages ایجاد کردم

    <?php
    
    namespace App\Http\Livewire;
    
    use Livewire\Component;
    
    class Messages extends Component
    {
        public $listeners = ['danger'];
        public $msg='';
        public $typ_msg='';
    
        public function danger($rec_msg)
        {
            $this->msg= $rec_msg;
            $this->typ_msg= 'danger';
        }
    
        public function render()
        {
            return view('livewire.messages');
        }
    }
    

    view:

    <div>
    
        @if (!empty($msg))
        <div class="alert alert-{{$typ_msg}}">
            <ul>
                @foreach ( $msg as $messages )
    
                    @foreach ( $messages as $message )
                    <li> {{$message}}</li>
                    @endforeach
    
                @endforeach
    
            </ul>
        </div>
        @endif
    </div>
    

    حالا هرجایی تو هر کامپوننت خواستید میتونین ازین کامپوننت استفاده کنید. مثلا : پارامتر اول key و دوم value

    $this->emit('danger', $validator->errors());

    پارامتر اول key و دوم value

    ------------------------

    البته بهتر هم میشه نوشت

    حوصلم نکشید clean code کنم

    می تونین هر داده ای رو هر جایی خواستین بفرستین

    سپاس از آقای بساکی عزیز

  • قاسم بساکی7 شهريور ۱۴۰۰

    خیلی عالی و خوشحالم که مشکل حل شد. 

    توی پروژه از emit  هم استفاده کردیم برای نمایش پیام تایید

    موفق باشید