محمد
3 سال پیش توسط محمد مطرح شد
4 پاسخ

عدم کارکرد دکمه خروج در لاراول 8

سلام دوستان
@ali.bayat
@hesammousavi
در لارول 8 من از پکیج fortify استفاده کردم ولی وقتی میخوام خروج کنم نمیتونم

<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
                                    Logout </a>
 <form id="logout-form" action="{{ route('logout') }}" method="POST">
  @csrf
</form>

وقتی در مرورگرم روی خروج کلیک میکنم عملی صورت نمیگیره ودر console خطا زیر رو میده:

Uncaught TypeError: Cannot read property 'submit' of null
    at HTMLAnchorElement.onclick ((index):31)

من از bootstrap5 استفاده میکنم و مطابق توضیحات خودش فایل های js , css اون رو قرار دادم و خود بوت استرپ به درستی کار میکنه
کسی میتونه کمک کنه؟؟؟


ثبت پرسش جدید
محمد
@learnmaster1293 3 سال پیش آپدیت شد
1

مشکل رو پیدا کردم
مشکل این بود که کل سیستم مدیریتی login -logout - register خودشون توی یک form بودن بعد برای logout باید یک فرم دیگه باشه ، پس کدهای من به شل زیر در اومده بودن

<form>
    <form id='logout-form'>
    </form>
</form>

بخاطر فرم درون فرم بود submit() درست کار نمیکرد.
نتیجه:
کافیه فرم برای logout رو خارج از فرم اصلی بنویسیم

<form>
</form>
<form id='logout-form'>
</form>

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

<form class="d-flex">
                        @if (Route::has('login'))
                            @auth
                                <a href="{{ url('/home') }}" class="nav-link">Home</a>
                                <a href="{{ route('logout') }}"
                                   onclick="event.preventDefault();document.getElementById('logout-form').submit();">
                                    {{ __('Logout') }} </a>
                            @else
                                <a href="{{ route('login') }}" class="nav-link">Login</a>
                                @if (Route::has('register'))
                                    <a href="{{ route('register') }}" class="nav-link">Register</a>
                                @endif
                            @endauth
                        @endif
                    </form>
                    <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none" >
                        @csrf
                    </form>

علیرضا
تخصص : برنامه نویس
@alirezashekofteh 3 سال پیش مطرح شد
1

دوست عزیزم @juza66
این دکمه پیشفرض خود لاراول 8 هستش و هیچ ماستو قیمه ای رو قاطی نکرده
دوست عزیز @learnmaster1293
کدت هات دقیقا درسته و با کد های خودم که داره به خوبی کار میکنه چک کردم مشکلی نداشت

<a class="btn btn-link p-1 ml-2" href="{{ route('logout') }}"
                                   onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                    خروج
                                </a>

                                <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
                                    @csrf
                                </form>

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

همممممممم :)
اوکی من فکر کردم خودش نوشته آخه چرا اینجوری!!!!!!!!!!!!!!!!!


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
1

به متن خطا دقت کن

Cannot read property 'submit' of null

این خطا در صورتی رخ میده که المانی با آی‌دی logout-form از طریق DOM قابل دسترسی نباشه
وقتی این المان قابل دسترس نباشه
مقدار null برگشت داده میشه
و وقتی شما بخواهی متد submit رو روی null صدا بزنی، خوب مسلما نمیتونی و به خطا میخوری

اما جالبه چون همین کد برای من به خوبی کار میکنه
مستندات fortify رو چک کن
ببین تغییری در ساختار این مکانیزم صورت نگرفته
همچنین میتونی از route:list استفاده کنی ببینی تو ساختار route ها تغییری هست یا نه


محمد
@learnmaster1293 3 سال پیش آپدیت شد
1

مشکل رو پیدا کردم
مشکل این بود که کل سیستم مدیریتی login -logout - register خودشون توی یک form بودن بعد برای logout باید یک فرم دیگه باشه ، پس کدهای من به شل زیر در اومده بودن

<form>
    <form id='logout-form'>
    </form>
</form>

بخاطر فرم درون فرم بود submit() درست کار نمیکرد.
نتیجه:
کافیه فرم برای logout رو خارج از فرم اصلی بنویسیم

<form>
</form>
<form id='logout-form'>
</form>

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

<form class="d-flex">
                        @if (Route::has('login'))
                            @auth
                                <a href="{{ url('/home') }}" class="nav-link">Home</a>
                                <a href="{{ route('logout') }}"
                                   onclick="event.preventDefault();document.getElementById('logout-form').submit();">
                                    {{ __('Logout') }} </a>
                            @else
                                <a href="{{ route('login') }}" class="nav-link">Login</a>
                                @if (Route::has('register'))
                                    <a href="{{ route('register') }}" class="nav-link">Register</a>
                                @endif
                            @endauth
                        @endif
                    </form>
                    <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none" >
                        @csrf
                    </form>

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام