درود خدمت همه دوستان عزیز و گرامی
من یه فرم ثبت مقاله درست کردم که کاربر بعد از وارد کردن عنوان مقاله و متن مقاله، دکمه ثبت مقاله رو میزنه و مقاله ثبت میشه و بعد از ثبت مقاله ریدایرکت میشه به صفحۀ اصلی ولی در زمان ریدایرکت کاربر هر چقدر که میخواد میتوانه روی دکمه ثبت مقاله کلیک کنه و به همان اندازه مقاله ثبت میشه.
دوستان متشکر میشم بگن که مشکل کدای من چی هست.
کدهای بخش 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>
سلام. شما از validate استفاده نکردید. میتونید عنوان رو با استفاده از validate با پارامتر unique محدود کنی که مقاله با اون عنوان فقط یک بار در دیتابیس ذخیره بشه که اگه بیش از یکبار دکمه ثبت رو بزنه، بار دوم و بعدش دیگه ذخیره نمیشه و به کاربر هم خطا میده که عنوانی که وارد کردی قبلا در دیتابیس ذخیره شده.
در مورد validate لاراول، در همین سایت راکت مفصل در آموزشهای لاراول پرداخته شده.
موفق باشید
درود..
نمونه کد زیر:
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('نوشته با موفقیت ایجاد شد.');
}
دوستان من در یک چیز که موندم اینکه بعد از ریدایرکت چرا هنوز همون صفحه ثبت مقاله برای من نشان داده میشه؟
از ولیدیشن ها استفاده کردم ArticleRequest کار ولیدیت رو انجام میده مشکل من اینکه بعد از زدن ریدایرکت نباید اون صفحه به من نشون داده بشه در حالی که نشون داده میشه.
برای اینکه خوب متوجه شدید گیف زیر را ببینید در این گیف من تعداد زیادی کلیک کردم و به تعداد کلیک های منم مقاله ثبت میشه و زمانی که کلیک نمیکنم به صفحه اصلی ریدایرکت میکنه.
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 خام پیاده سازی میکنم اصلا چنین مشکلی پیش نمیاد ولی در لاراول این مشکل پیش میاد.
@Tesla
درود...
کد زیر امتحان کردید؟
return redirect() -> route('cytus.show', $cytus->id) -> with('نوشته با موفقیت ایجاد شد.');
سلام
@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
به همین سادگی :-)
ولیدیشن رو یونیک کنید یا با همون شرطی که گفتم
راه های بیشتری هم برای اعتبار سنجی هست که میتونید با مراجعه به سایت لاراول و دستوراتش ازشون استفاده کنید
از ميدلور تراتل استفاده كن😁
مثلا تو يه دقيقه فقط يه درخواست ميتونه ارسال كنه!!
اين فيلتر كه از اسمش مشخصه فرض كن كاربر هي تند تند ميزنه روي ارسال و انگار داره گاز ميده هي😐 و تو جلوشو ميگيري ميگي هر دقيقه يا زمان مشخصي فقط يه دونه گاز ميتوني بدي😁
ولي من تست نكردم كه هي بزنه روي ثبت هي ثبت ميكنه يا اخريش رو ثبت ميكنه فقط!
موفق باشيد
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟