url parameters

پرسیده شده
فعالیت 1023 روز پیش
دیده شده 433 بار
0

سلام زمانی که با متد put یا patch فرم ارسال میشه رو توضیح ندادین 
پارامتر ها ارسالی رو هندل نکردیم
در حال حاضر میزته مسیر یافت نشد.

فایل پیوست

Mehrzad Tajkarimi
Mehrzad Tajkarimi

16 تیر 00

-1
حذف شده

سلام و احترام

فرم ها توی html فقط میتونن post یا get باشن و برای ارسال به صورت متدهای دیگه مثل put باید یه تگ hidden داخل فرم بزاریم تا سمت روتر بررسیش کنیم، یه همچین چیزی

<form method="post" ...>
  <input type="hidden" name="_method" value="put" />

حالا این _method رو داخل آرایه super global POST داریم و میتونیم جداگانه داخل کلاس request هم ذخیرش کنیم تا بتونیم چک کنیم ببینم اگه روت ما post بود میایم بررسی کنیم ببینیم _method که تعرفی کردیم با method داخل route همخونی داره یا ن 

 

داخل کلاس request

public function __construct()
{
    $this->form_method = isset($REQUEST['_method']) ? $REQUEST['_method'] : '';

    $this->params = $_REQUEST;

    $this->agent = $_SERVER['HTTP_USER_AGENT'];

    $this->method = strtolower($_SERVER['REQUEST_METHOD']);

    $this->ip = $_SERVER['REMOTE_ADDR'];

    $this->uri = strtok($_SERVER['REQUEST_URI'], '?');
}

اگه دقت کرده باشید اول متد construct تغریف کرد متغیر form_method رو حالا ما همینو داریم و میتونیم داخل کلاس router متد findCurrentRoute هم بررسیش کنیم

داخل متد findCurrentRoute هم باید یه شرط بزارید ببینید form_method  خالی نباشه و اگه خالی نبود مقدارش با با متد روت مقایسه کنید تا ببینید تطابق داره یا ن

فایل پیوست

امیر صالحی

توسط

امیر صالحی

16 تیر 00

حذف شده
میبخشید من یکم گیج شدم پس اگه قرار ما فقط متد get ,postداشته باشیم و با پارامتر های ارسالی چک کنیم مقدار put , delete رو چه دلیل داشت دکتر داخل کلاس روت براشون متد بسازند
Mehrzad Tajkarimi

18 تیر 00

0
حذف شده

سلام خواستم بگم مشکل رو حل کردم 
فقط شما فرمودین داخل  findCurrentRoute باید چک بکنیم 
که ای ساعتها منو به اشتباه انداخت 
و در واقع متوجه نمیشدم
بعد با اصلاح  method  در کلاس  request و چک کردم مقدار دریافتی در پارامتر  method_
مشکل حل شد.

 

 

class Request
{
    private  $form_method;
    public  function __construct()
    {
     $this->form_method = isset($_REQUEST['_method']) ? $_REQUEST['_method'] : '';
     }
    public  function method()
    {
        if ($this->method == 'post' && !empty($this->form_method)) {
            $this->method = $this->form_method;
        }
        return $this->method;
    }
  }






 

فایل پیوست

Mehrzad Tajkarimi

توسط

Mehrzad Tajkarimi

18 تیر 00

-1
حذف شده

سلام و احترام

این متدها توی همه ی روتر ها وجود داره و دلیلش هم اینکه باید متوجه بشیم روتی که تعریف کردیم دقیقا میخواد چی کارکنه، برای مثال اگه قراره چیزی آپدیت بشه حتما باید براش حتما verb که همون (post - put - delete - get و.) هستش رو قرار بدیم تا داخل کد هم قابل کنترل باشه و درخواستی که از سمت کاربر میاد رو بتونیم کنترل کنیم

https://datatracker.ietf.org/doc/html/rfc7231#section-4

 

میتونیم به این شکل چک کنیم ببینیم اصلا درخواستی که اومده برای مثال delete بوده یا ن 

$_SERVER['REQUEST_METHOD'] === 'DELETE'

 

فقط یه موردی، اگه به پاسخی نمره منفی میدید لطف کنید دلیلشو هم بگید تا کیفیت پاسخ گویی ها رو بالا ببریم، ممنون

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

19 تیر 00

0
حذف شده

سلام خسته نباشید 
چیزی من از پاسخ شما برداشت کردم 
مشکل من رو نتونست حل بکنه
خیلی تلاش کردم کلی وقت گذاشتم که دستوری که شما دادین استفاده کنم ولی به نتیجه نرسیدم 
ببینید فرمایش شما تا اونجا نتیجه داشت که مقدار hidden در واقع داخل request در یافت میکردیم
ولی بعد شما فرمودین داخل روت باید بهش دسترسی داشت ولی برای استقاده از مقادیر put delete باید قبل از روتر این اقدام صورت بگیره تا مقدار روت شامل آرایه های دریافتی از request باشد
حتما شما خیلی خیلی تحربه بیشتری از من دارید
من متوجه هستم شما فقط مسیر رو به ما قرار هست در پاسختون نشون بدهید 
من هم موافق این داستان هستم 
ولی مسیری باشه که شما خودتون پیاده کرده باشید و نتیحه رو دیده باشید 
هیج قصد و غرضی در کار نیست 
من هرجا نتیجه گرفتم تیک مثبت رو زدم هرجایی پاسخ شما بهم کمک نکرد اعلام کردم 
در بالا هم دلایلم در پاسخ شما دلیل به نتیجه نرسیدنم رو هم عرض کردم خدمتتون 

فایل پیوست

Mehrzad Tajkarimi

توسط

Mehrzad Tajkarimi

20 تیر 00

حذف شده
خیلی ممنون از فیدبکی که دادید حتما تمامی مواردی که گفتید رعایت میشه
امیر صالحی

20 تیر 00