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

سوال شده توسط:

تاریخ ثبت: ۱۴۰۰/۰۵/۳۰

بازدید: 1,393

پاسخ: 7

تگ: Laravel


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

قاسم بساکی

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

برای نمایش ارور 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();
}

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

user

قاسم بساکی

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

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

قاسم بساکی


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

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

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

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

user

سلام 

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

سشن جواب نداد

user

قاسم بساکی

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

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

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

@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
user

با سشن نشد

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

اولین روشی که کامل جواب داد و میتونی کلی پارامتر هر جایی که دلت خواست بفرستی دستور 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 کنم

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

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

user

قاسم بساکی

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

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

موفق باشید

برای ثبت پاسخ باید خود شوید

محبوب ترین مقالات