Tesla
6 سال پیش توسط Tesla مطرح شد
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>

ثبت پرسش جدید
امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 6 سال پیش مطرح شد
1

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

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 6 سال پیش مطرح شد
1

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

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 6 سال پیش مطرح شد
1

سلام
@Tesla

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


Tesla
@Tesla 6 سال پیش مطرح شد
0

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


Tesla
@Tesla 6 سال پیش مطرح شد
0

برای اینکه خوب متوجه شدید گیف زیر را ببینید در این گیف من تعداد زیادی کلیک کردم و به تعداد کلیک های منم مقاله ثبت میشه و زمانی که کلیک نمیکنم به صفحه اصلی ریدایرکت میکنه.
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 6 سال پیش مطرح شد
1

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

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

Tesla
@Tesla 6 سال پیش آپدیت شد
0

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

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

Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
0

سلام
@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

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

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


امیر پاشایی
تخصص : web developer
@amirpashaie 6 سال پیش مطرح شد
0

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

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

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

موفق باشيد


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

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