سلام دوستان
@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 اون رو قرار دادم و خود بوت استرپ به درستی کار میکنه
کسی میتونه کمک کنه؟؟؟
مشکل رو پیدا کردم
مشکل این بود که کل سیستم مدیریتی 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>
دوست عزیزم @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>
به متن خطا دقت کن
Cannot read property 'submit' of null
این خطا در صورتی رخ میده که المانی با آیدی logout-form از طریق DOM قابل دسترسی نباشه
وقتی این المان قابل دسترس نباشه
مقدار null برگشت داده میشه
و وقتی شما بخواهی متد submit رو روی null صدا بزنی، خوب مسلما نمیتونی و به خطا میخوری
اما جالبه چون همین کد برای من به خوبی کار میکنه
مستندات fortify رو چک کن
ببین تغییری در ساختار این مکانیزم صورت نگرفته
همچنین میتونی از route:list استفاده کنی ببینی تو ساختار route ها تغییری هست یا نه
مشکل رو پیدا کردم
مشکل این بود که کل سیستم مدیریتی 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>
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟