راکت

ثبت اطلاعات بعد از ریدایرکت کردن صفحه

9 پاسخ

درود خدمت همه دوستان عزیز و گرامی

من یه فرم ثبت مقاله درست کردم که کاربر بعد از وارد کردن عنوان مقاله و متن مقاله، دکمه ثبت مقاله رو میزنه و مقاله ثبت میشه و بعد از ثبت مقاله ریدایرکت میشه به صفحۀ اصلی ولی در زمان ریدایرکت کاربر هر چقدر که میخواد میتوانه روی دکمه ثبت مقاله کلیک کنه و به همان اندازه مقاله ثبت میشه.
دوستان متشکر میشم بگن که مشکل کدای من چی هست.
کدهای بخش web.php:

Route::get('/', 'ArticleController@index')->name('article.index');
Route::get('article/create', 'ArticleController@createView');
Route::post('article/create', 'ArticleController@create')->name('article.create');

کد های بخش ArticleController.php:

<?php

namespace App\Http\Controllers;

use App\Article;
use App\Http\Requests\ArticleRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Validator;

class ArticleController extends Controller
{
    public function index()
    {
        $articles = Article::latest()->take(10)->get();
        return view('articles.index', compact('articles'));
    }

    public function createView()
    {
        return view('articles.create');
    }

    public function create(ArticleRequest $request)
    {

        Article::create([
            'user_id' => 1,
            'title' => $request->input('title'),
            'body' => $request->input('body')
        ]);

        return redirect('/');
    }
}

کد های فرم html:

<form method="post" action="{{ route('article.create') }}">
        {!! csrf_field() !!}
        <div class="form-group">
            <label for="title">عنوان مقاله:</label>
            <input type="text" class="form-control" name="title" id="title" placeholder="عنوان مقاله...">
        </div>
        <div class="form-group">
            <label for="body">متن مقاله:</label>
            <textarea class="form-control text-justify space-normal" name="body" id="body" placeholder="متن مقاله..." rows="15"></textarea>
        </div>
        <button class="btn btn-primary" type="submit">ثبت مقاله</button>
    </form>
Tesla
Tesla
@Tesla
ثبت پرسش جدید

پاسخ‌ها

9
امین محمدزاده
امین محمدزاده
@amin.webdesign

تخصص: برنامه نویسی وب - Laravel

سلام. شما از validate استفاده نکردید. میتونید عنوان رو با استفاده از validate با پارامتر unique محدود کنی که مقاله با اون عنوان فقط یک بار در دیتابیس ذخیره بشه که اگه بیش از یکبار دکمه ثبت رو بزنه، بار دوم و بعدش دیگه ذخیره نمیشه و به کاربر هم خطا میده که عنوانی که وارد کردی قبلا در دیتابیس ذخیره شده.

در مورد validate لاراول، در همین سایت راکت مفصل در آموزشهای لاراول پرداخته شده.
موفق باشید

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

درود..
نمونه کد زیر:

public function store(Request $request)
    {
        $this -> validate($request, array(
            'title' => 'required | max:200',
            'description' => 'required'
        ));

        $cytus = New Cytus;
        $cytus -> title = $request -> title;
        $cytus -> description = $request -> description;
        $cytus -> save();

        return redirect() -> route('cytus.show', $cytus->id) -> with('نوشته با موفقیت ایجاد شد.');

    }

شاید پاسخ شما همین‌جا باشد

Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@Tesla

از ولیدیشن های لاراول استفاده کنید
تمامی موارد رو میتونید کنترل کنید

Tesla
Tesla
@Tesla

دوستان من در یک چیز که موندم اینکه بعد از ریدایرکت چرا هنوز همون صفحه ثبت مقاله برای من نشان داده میشه؟
از ولیدیشن ها استفاده کردم ArticleRequest کار ولیدیت رو انجام میده مشکل من اینکه بعد از زدن ریدایرکت نباید اون صفحه به من نشون داده بشه در حالی که نشون داده میشه.

Tesla
Tesla
@Tesla

برای اینکه خوب متوجه شدید گیف زیر را ببینید در این گیف من تعداد زیادی کلیک کردم و به تعداد کلیک های منم مقاله ثبت میشه و زمانی که کلیک نمیکنم به صفحه اصلی ریدایرکت میکنه.
http://uupload.ir/files/wtax_record_2019_02_28_11_08_07_337.gif

اما در این گیف فقط یکبار کلیک میکنم و یک مقاله ثبت و به صفحه اصلی ریدایرکت میشه.
http://uupload.ir/files/s2ko_record_2019_02_28_11_09_40_271.gif

تنها چیزی که من موندم اینکه وقتی مشابه همین فرم رو با خود php خام پیاده سازی میکنم اصلا چنین مشکلی پیش نمیاد ولی در لاراول این مشکل پیش میاد.

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@Tesla
درود...
کد زیر امتحان کردید؟

return redirect() -> route('cytus.show', $cytus->id) -> with('نوشته با موفقیت ایجاد شد.');
Tesla
Tesla
@Tesla

بله فرقی نکرد.
بصورت زیر استفاده کردم:

return redirect()->route('article.index');`
Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@Tesla
ببینید شما اگر میخوایید چندین مقاله با یه تایتل براتون ثبت نشه
uniqe کنید
چه تو مایگریت چه توی ولیدیشن
چه با یه دستور شرطی
تایتل رو از ورودی بگیرید
اگر تو دیتابیستون همچین تایتلی بود که اصلا return false کنید یا برگردونید به صفحه اصلی!
برای ریدایرکت هم

return redirect()->route('article.index')->with('success', 'مقاله مورد نظر با موفقیت ثبت شد');

این success رو هم میتونید تو ویوو و blade مورد نظر ازش استفاده کنید که زیبا تر بشه

@if(session('success'))
    <div class="alert alert-success">
        <p>{{session('success')}}</p>
    </div>
@endif

به همین سادگی :-)

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

امیر پاشایی
امیر پاشایی
@amirpashaie

تخصص: web developer

از ميدلور تراتل استفاده كن😁
مثلا تو يه دقيقه فقط يه درخواست ميتونه ارسال كنه!!

اين فيلتر كه از اسمش مشخصه فرض كن كاربر هي تند تند ميزنه روي ارسال و انگار داره گاز ميده هي😐 و تو جلوشو ميگيري ميگي هر دقيقه يا زمان مشخصي فقط يه دونه گاز ميتوني بدي😁

ولي من تست نكردم كه هي بزنه روي ثبت هي ثبت ميكنه يا اخريش رو ثبت ميكنه فقط!

موفق باشيد

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

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