سلام من یه سوالی داشتم
ببینید من یه مشکلی دارم که مثلا کاربر میخواد برای پستی کامنتی بذاره
خوب من post_id داخل input هیدن میذارم و میفرستم
ولی توی inspect هیدن نیست و میشه تغییرش داد
مثلا کاربر میتونه بره post_id=88 رو بکنه post_id=70 و کامنت اون برای پست 70 ارسال میشه
داخل همین انجمن راکت
من میتونم توی textarea با استفاده از inspect شناسه سوال رو دربیارم و برم توی یک سوال دیگه شناسه رو جایگزین کنم و جواب رو بدم
و جواب برای سولی که شناسه اش رو دستی وارد کردم ارسال میشه
چطوری میشه جلوی این کار رو گرفت و نگذاشت که کاربر اصلا id رو ببینه که بتونه تغییرش بده
با تشکر
با استفاده از Route-Model Binding نمونه ی مدلی که میخواهیم عملیاتی بر روی اون انجام دهیم به عنوان پارامتر به route افزوده میشه. برای مثال به جای افزودن ID پست، میتونید نمونه ایجاد شده از مدل پست را به کنترلر بفرستید.
به زبان کد اگر بخواهیم بگیم:
Route زیر رو در نظر بگیرید
Route::get('post/{post}', 'PostController@show');
کد در کنترلر بدون Route-Model Binding :
<?php
namespace App\Http\Controllers;
use App\Post;
class PostController extends Controller
{
public function show($id) {
$post = Post::find($id);
return $post
}
}
کد در کنترلر با Route-Model Binding :
<?php
namespace App\Http\Controllers;
use App\Post;
class PostController extends Controller
{
public function show(Post $post) {
return $post
}
}شاید پاسخ شما همینجا باشد
@ali.bayat
سلام
خب این $post رو که باید پیدا کنه ...
@tabeshr
سلام
ببییند این کار آسیبی به سایت نمیزنه
فرض کنید post_id رو تغییر بده . چه اتفاقی میافته ؟
ولی یک کاری میتونید بکنید که خیلی نمیپنسدم
اونم اینکه که فرض کنید آدرس پست شما این باشه : site.com/post/laravel-controllers
(مثلا این laravel-controllers آدرس یا همون slug شما هست)
توی فرمی که کامنت رو سابمیت میکنه به action مقدار ندین که رد نتیجه فرم سابمیت میشه به همون آدرس site.com/post/laravel-controllers ، (یا حتی میتونید مقدار action رو همین site.com/post/laravel-controllers بدین)
حالا میتونید یک route با متد post بسازین که با slug کار کنه و دیگه id ندین
مثلا
Route::get('post/slug','HomeController@show_post');
Route::post('post/slug','HomeController@store_comment');@vahidrezazadeh
$post رو براحتی با Route Model Binding میشه درآورد.
از نظر امنیتی مشکلی وجود نداره ولی اگر بخوای جلوش رو بگیری بهترین کار اینه که id رو با یه کلید خاص رمز گذاری کنی بفرستی داخل input hidden و موقع گرفتن درخواست مقدار رمزگذاری شده رو با کلید خاص دوباره به id برگردونی .
سلام
یه راه دیگه این هست که وقتی شما وارد اون پُست خاص میشید، آی دی اون پُست رو توی session ذخیره کنید
و در کلاس مورد نظرتون که عملیات درج رو انجام میدید، از اون Session بخونید
البته من این کار رو برای پروژه هایی که از معماری خاصی استفاده نمیکنن انجام میدم، نمیدونم برای لاراول منطقی هست یا نه و از قوانین mvc پیروی میکنه یا خیر
@ali.bayat
خب باید یک ID چیزی باشه...