@ali.bayat
@Alimotreb
@khanzadimahdi
من یک فرم دارم که نام و نام خانوادگی دارد زمانی که میخوام ادیت کنم نام رو ادیت می کنم و نام خانوادگی رو دست نمیزنم و وقتی سیو میکنم سیو میشه اما نام خانوادگی که قبلا سیو کرده بودم پاک میشه و در دیتابیس nullمیزنه
این کار رو من به صورت api نوشتم باید چیکار کنم که اون مقدار قبلی اگر تغییر نکرد در دیتابیس نگه داره
@masoudproton
میشه به چند روش انجام داد
1-اگر api هست پس نیازی نیست مواردی که خالی هستند ارسال بشن، مثلا اگر فقط نام پر شده، همون رو ارسال کنید به API
2-زمانی که توی صفحه فرم هستید، یه درخواست بدید به API و اطلاعات کاربر رو بگیرید و توی فیلدهای فرم جاگذاری کنید، که از پیش پر بشن، مثل فرم پروفایل راکت، و زمانی که ارسال رو بزنی، همه فرم پر شده میان، اینجوری اگر فیلدی تغییر کرده باشه آپدیت میشه، و بقیه فیلدها هم با مقدار قدیمی آپدیت میشن، میتونی روی فرم required بزاری، که نتونه فیلدی رو خالی بفرسته
3- میتونید یه request form بسازید، و اونجا چک کنید مقادیری که خالی هستند از ارایه request حذف بشن و بعد آپدیت صورت بگیره
میتونید همه این موارد رو هم باهم انجام بدید
موفق باشید
@pesaregorg
همین گزینه یک رو میخوام چطوری تشخیص بدم کدوم پر شده و فقط اون رو بفرسته میشه با کد بگید .
قسمت backendکار رو من مینویسم قسمت فرانت اندقسمت فرانت اند دست من نیست
@masoudproton
این بخش در هر دو طرف میتونه انجام بشه، یعنی در فرانت قبل ارسال چک کنه، یعنی با جاوااسکریپت چک کنه، هر فیلدی که خالیه به آرایه ای که قراره ارسال بشه اضافه نشه
در بکند هم شما میتونید بجای دریافت مستقیم request به عنوان ورودی متد، یک form request بسازید( نحوه ایجادش در گوگل هست)
نحوه ایجادش:
php artisan make:request UserForm
و مقادیر فرم رو اینجا چک کنید، و هر کدوم خالی بود رو حذف کنید، و بقیه رو در یک آرایه بریزید، و حالا این آرایه جدید رو به عنوان ورودی به متد آپدیت توی کنترلر بدید
@masoudproton
بیخیال اون فرم. کد زیر رو ببین توی متد مورد نظرت استفاده کن
public function update(Request $request)
{
$user = auth()->user();
$input = array_filter($request->all(), 'strlen');
return $user->update($input);
}
این خط واست چک میکنه مقادیر خالی رو از آرایه حذف میکنه
$input = array_filter($request->all(), 'strlen');
این کد منه کجاش باید اضافه کنم
public function style_edit(Request $request,$id)
{
$valiDate = $this->validate($request, [
'admin_id'=>'',
'form_id' => 'min:0|max:7',
'form_width' => 'min:0|max:7',
'label_alignment' => '',
'question_spacing' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
'font' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
]);
$user= StyleModel::find($id);
if ($user->admin_id == auth()->user()->id) {
$user->admin_id=auth()->user()->id;
$user->form_id = $valiDate['form_id'];
$user->form_width = $valiDate['form_width'];
$user->label_alignment = $valiDate['label_alignment'];
$user->question_spacing = $valiDate['question_spacing'];
$user->label_width = $valiDate['label_width'];
$user->font = $valiDate['font'];
$user->label_width = $valiDate['label_width'];
if ($user->update()) {
return response([
'data' => [
'message' => ' style is register',
],
'status' => 'success',
'info' => $user
]);
}
} else {
return "Id not found";
}
}
public function style_edit(Request $request,$id)
{
$valiDate = $this->validate($request, [
'admin_id'=>'',
'form_id' => 'min:0|max:7',
'form_width' => 'min:0|max:7',
'label_alignment' => '',
'question_spacing' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
'font' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
]);
$input = array_filter($valiDate, 'strlen');
$user= StyleModel::find($id);
if ($user->admin_id == auth()->user()->id) {
$user->admin_id=auth()->user()->id;
$user->form_id = $input ['form_id'];
$user->form_width = $input ['form_width'];
$user->label_alignment = $input ['label_alignment'];
$user->question_spacing = $input ['question_spacing'];
$user->label_width = $input ['label_width'];
$user->font = $input ['font'];
$user->label_width = $input ['label_width'];
if ($user->update()) {
return response([
'data' => [
'message' => ' style is register',
],
'status' => 'success',
'info' => $user
]);
}
} else {
return "Id not found";
}
}
@pesaregorg
این ارور رو میده
Argument 1 passed to App\\Http\\Controllers\\Controller::validate() must be an instance of Illuminate\\Http\\Request, array given, called in /home/netwons/PhpstormProjects/untitled/app/Http/Controllers/Api/v1/ColorsController.php on line 259
@masoudproton
این رو امتحان کن
public function style_edit(Request $request,$id)
{
$input = array_filter($request->all(), 'strlen');
$valiDate = $this->validate($input, [
'admin_id'=>'',
'form_id' => 'min:0|max:7',
'form_width' => 'min:0|max:7',
'label_alignment' => '',
'question_spacing' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
'font' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
]);
$user= StyleModel::find($id);
if ($user->admin_id == auth()->user()->id) {
$user->admin_id=auth()->user()->id;
$user->form_id = $valiDate['form_id'];
$user->form_width = $valiDate['form_width'];
$user->label_alignment = $valiDate['label_alignment'];
$user->question_spacing = $valiDate['question_spacing'];
$user->label_width = $valiDate['label_width'];
$user->font = $valiDate['font'];
$user->label_width = $valiDate['label_width'];
if ($user->update()) {
return response([
'data' => [
'message' => ' style is register',
],
'status' => 'success',
'info' => $user
]);
}
} else {
return "Id not found";
}
}
public function style_edit(Request $request,$id)
{
$valiDate = $this->validate($request->all(), [
'admin_id'=>'',
'form_id' => 'min:0|max:7',
'form_width' => 'min:0|max:7',
'label_alignment' => '',
'question_spacing' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
'font' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
]);
$input = array_filter($request->all(), 'strlen');
$user= StyleModel::find($id);
if ($user->admin_id == auth()->user()->id) {
$updateUser = $user->update($input);
if ($updateUser) {
return response([
'data' => [
'message' => ' style is register',
],
'status' => 'success',
'info' => $updateUser
]);
}
} else {
return "Id not found";
}
}
سلام. در چنین حالت هایی متد درخواست های خودتون رو درون روتر به patch تغییر حالت بدید مشکلتون حل میشه. درخواست ها رو هم به صورت patch ارسال کنید.
نیاز به هیچگونه تغییرات درون کدها نیست.
این ارور رو میده زمانی که patch میکنم میگه این متغییر نیست در صوزتی که هست
Undefined index: form_id",
public function style_edit(Request $request,$id)
{
$valiDate = $this->validate($request, [
'admin_id'=>'',
'form_id' => 'min:0|max:7',
'form_width' => 'min:0|max:7',
'label_alignment' => '',
'question_spacing' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
'font' => 'min:0|max:7',
'label_width' => 'min:0|max:7',
]);
$user= StyleModel::find($id);
if ($user->admin_id == auth()->user()->id) {
$user->admin_id=auth()->user()->id;
$user->form_id = $valiDate['form_id'];
$user->form_width = $valiDate['form_width'];
$user->label_alignment = $valiDate['label_alignment'];
$user->question_spacing = $valiDate['question_spacing'];
$user->label_width = $valiDate['label_width'];
$user->font = $valiDate['font'];
$user->label_width = $valiDate['label_width'];
if ($user->update()) {
return response([
'data' => [
'message' => ' style is register',
],
'status' => 'success',
'info' => $user
]);
}
} else {
return "Id not found";
}
}
به صورت زیر
$valiDate = $request->only([
'admin_id', 'form_id',
'form_width', 'label_alignment',
'question_spacing', 'label_width',
'font', 'label_width',
]);
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟