جستجو در بخش : سوال جواب منابع اسلامی لغت نامه ها قوانین و مصوبات نقل قل ها
×

فرم ورود

ورود با گوگل ورود با گوگل ورود با تلگرام ورود با تلگرام
رمز عبور را فراموش کرده ام عضو نیستم، می خواهم عضو شوم
×

×

آدرس بخش انتخاب شده


جهت کپی کردن میتوانید از دکمه های Ctrl + C استفاده کنید
رویداد ها - امتیازات
در حال بارگذاری
×

رویداد ها - امتیازات

برای بررسی عملکرد فعالیت و امتیازات خود باید در وب سایت وارد باشید. در صورت عضویت از بخش بالای صفحه وارد شوید، در غیر این صورت از دکمه پایین، مستقیم به صفحه ثبت نام وارد شوید.

×
×
×

دلیل درخواست بستن پست

کلیه پست هایی که جنبه تبلیغاتی داشته، محتوای اسپم و بی مفهوم در این دسته قرار میگیرند. همچنین پست هایی که به منظور گرفتن بک لینک درج می شوند شامل این مورد هستند.
حاوی مفاهیم غیر اخلاقی، سیاسی و یا توهین آمیز. کلیه پست هایی که از نظر محتوایی نیاز به بررسی و یا حذف شدن دارند در این دسته قرار می گیرند.
محتوایی با عدم جزئیات کافی و مورد نیاز. کلیه پست هایی که منظور نویسنده به وضوح مشخص نیست و نیازمند توضیحات و جزئیات بیشتر می باشند در این دسته قرار می گیرند.
محتوایی بی ربط با موضوعیت سرفصل کلی. کلیه پست هایی که از منظر مفهوم و مضمون ارتباطی با عنوان اصلی سوال ندارند در این دسته قرار می گیرند.
محتوایی دلخواه و بر پایه سلیقه. کلیه پست هایی که یک پاسخ مشخص ندارند و متوانند چندین پاسخ متفاوت و صحیح داشته باشند که کاملا مبتنی بر نظر شخصی افراد هستند در این دسته قرار می گیرند.
محتوایی در حوزه خیلی وسیع. کلیه پست هایی که از نظر محتوایی در یک حوزه ی وسیعی قرار دارند و مشخصا به یک موضوع خاصی اشاره ندارند که پاسخدهی به آن ها مستلزم تشریح مفاهیمی کلی می باشند در این دسته قرار می گیرند.
قبلا در لام تا کام مطرح شده. پست هایی که دقیقا با همین محتوا و مضمون قبلا در وب سایت لام تا کام درج شده اند، با ذکر آدرس منبع تکراری با پست حال حاضر شامل این دسته هستند. تکراری است با:
به سایر دلایل، نیازمند به بررسی توسط مدیر. به هر دلیل غیری که پست را نیازمند بررسی توسط مدیر کرده، با ذکر دلیل، در این دسته قرار میگیرد.
ارسال رای بستن

بهبود فایل route در php mvc


1
0
1143

سلام من از php mvc استفاده میکنم و این فایل route من هست

<?php namespace Core;

class Router
{
    protected $routes = [];

    protected $params = [] ;

    protected $namespace = 'App\Controllers\\';

    public function add($route , $params )
    {
        $route = preg_replace('/^\//','' , $route);

        $route = preg_replace('/\//' , '\\/' , $route);

        $route = preg_replace('/\{([a-z]+)\}/' , '(?<\1>[a-z0-9-]+)' , $route);

        $route = '/^' . $route . '\/?$/i';

        if(is_string($params)) {
            list($AllParams['controller'] , $AllParams['method']) = explode('@' , $params);
        }

        if(is_array($params)) {
            list($AllParams['controller'] , $AllParams['method']) = explode('@' , $params['uses']);
            unset($params['uses']);
            $AllParams = array_merge($AllParams , $params);

        }

        $this->routes[$route] = $AllParams;
    }

    public function match($url)
    {
        foreach ($this->routes as $route => $params) {
            if(preg_match($route , $url , $matches)) {
                foreach ($matches as $key => $match) {
                    if(is_string($key)) {
                        $params['params'][$key] = $match;
                    }
                }
                $this->params = $params;
                return true;
            }
        }
        return false;
    }

    public function dispatch($url)
    {
        $url = $this->removeVariblesOfQueryString($url);
        if($this->match($url)) {
            $controller = $this->params['controller'];
            $controller =  $this->getNameSpace() . $controller;

            if(class_exists($controller)) {
                $controller_object = new $controller();

                $method = $this->params['method'];

                if(is_callable([$controller_object , $method])) {
                        $this->params['params'] = isset($this->params['params']) ? $this->params['params'] : [];
                        echo call_user_func_array([$controller_object , $method] , $this->params['params']);

                } else {
                    throw new \Exception("Method {$method} (in controller {$controller}) not found");
                }
            } else {
                throw new \Exception("Controller class {$controller} not found",404);
            }
        } else {
            throw new \Exception("no route matched.",404);
        }
    }
    public function getRoutes()
    {
        return $this->routes;
    }

    public function getParams()
    {
        return $this->params;
    }

    protected function getNameSpace()
    {
        $namespace = $this->namespace;

        if(array_key_exists('namespace' , $this->params)) {
            $namespace .= $this->params['namespace'] . '\\';
        }

        return $namespace;
    }

    protected function removeVariblesOfQueryString($url)
    {
        if($url != '') {
            $parts = explode("&" , $url , 2);
            if(strpos($parts[0] , '=') === false) {
                $url = $parts[0];
            } else {
                $url = '';
            }
            return $url;
        }
    }

}

حالا من اومدم یه روت ایجاد کردم به شکل زیر

$router->add('/news/{city}','cityController@index');

مشکل اینجاست وقتی به سیتی پارامتر فارسی پاس میدم برام ارور میداد ارور زیر

Fatal error
Uncaught exception: 'Exception'

Message : 'no route matched.'

Stack trace:

0 C:\xampp\htdocs\afmPdf\public\index.php(13): Core\Router->dispatch('news/\xD8\xA7\xD8\xB1\xD8\xA7\xDA\xA9')
1 {main}
Thrown in 'C:\xampp\htdocs\afmPdf\Core\Router.php' on line 74

حالا من چیکار کنم که بتونم پارامتر فارسی هم بفرستم چه تغییری باید ایجاد کنم؟

تکنولوژی برنامه-نویسی پی-اچ-پی عبارات-باقاعده
ویرایش شده در 4 سال قبل داود  فردعباسی
1139 امتیاز
سوال شده در داود  فردعباسی
18 امتیاز


خب ظاهرا اون روتی که شما کال میکنید مچ نمیشه با روت هایی که تعریف کرده اید. آيا مطمئنید روت رو از قبل تعریف کرده اید ؟ ــ Ali reza در 4 سال قبل

سلام ممنون از توجهتون بله جناب من روت رو نوشتم $router->add('/news/{cit y}','cityController@inde x'); این روت من هست -- داخل متغیر city بر فرض مثال arak که قرار میدم بدرستی کار میکنه ولی به صورت فارسی اراک رو پاس میدم بهش این ارور میاد ــ داود فردعباسی در 4 سال قبل

لطفا اگر پاسختون رو گرفتید .. جواب مورد نظرتون رو تایید کنید (تیک سبز رنگ رو بزنید) ــ سجاد شفی زاده در 4 سال قبل

500 کاراکتر باقی مانده

1 جواب

2

شما باید این خط را

$route = preg_replace('/\{([a-z]+)\}/' , '(?<\1>[a-z0-9-]+)' , $route);

به صورت [ا-ی] را به کد خود به صورت زیر اضافه کنید.

$route = preg_replace('/\{([a-z]+)\}/' , '?([a-z0-9ا-ی]+)' , $route);

تا عبارات با قاعده شما کلمات فارسی را نیز پشتیبانی کند

ویرایش شده در 4 سال قبل
جواب داده شده در علی رضایی <m>★</m>
1139 امتیاز


دوست عزیز جایگزین کردم تغییر نکرد ــ داود فردعباسی در 4 سال قبل
1
@داود..فردعباسی یک تیکه کد از قبل جا مونده بود بنده دقت نکردم ویرایش شد دوباره تست کنید. ــ علی رضایی در 4 سال قبل

اینو که گذاشتم روت هام کلا باز نشد دیگه ــ داود فردعباسی در 4 سال قبل
2
@داود..فردعباسی demo لطفا این دمو رو مشاهده کنید ــ علی رضایی در 4 سال قبل

خیلی از شما ممنونم جناب قایینی مشکل رفع شد خیلی سپاسگزارم مشکل بزرگی برام حل شد ــ داود فردعباسی در 4 سال قبل
1
@داود..فردعباسی خواهش میکنم موفق باشید. ــ علی رضایی در 4 سال قبل

500 کاراکتر باقی مانده


جواب شما
     
.....
×

×

جعبه لام تا کام


وب سایت لام تا کام جهت نمایش استاندارد و کاربردی در تمامی نمایشگر ها بهینه شده است.

تبلیغات توضیحی


داپ اَپ اولین پلتفرم کش‌بک در ایران
اگه میخوای از خریدهایی که میکنی، پاداش نقدی دریافت کنی داپ اَپ رو نصب کن.

تبلیغات تصویری