PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`routes = [ // AMP Routes '/amp' => ['controller' => 'AmpController', 'action' => 'home'], '/amp/hizmetler' => ['controller' => 'AmpController', 'action' => 'services'], // Admin Routes '/admin' => ['controller' => 'AdminController', 'action' => 'index'], '/admin/login' => ['controller' => 'AdminController', 'action' => 'login'], '/admin/login/check' => ['controller' => 'AdminController', 'action' => 'loginCheck'], '/admin/logout' => ['controller' => 'AdminController', 'action' => 'logout'], '/admin/services' => ['controller' => 'AdminServiceController', 'action' => 'index'], '/admin/services/create' => ['controller' => 'AdminServiceController', 'action' => 'create'], '/admin/services/edit/(\d+)' => ['controller' => 'AdminServiceController', 'action' => 'edit'], '/admin/services/delete/(\d+)' => ['controller' => 'AdminServiceController', 'action' => 'delete'], '/admin/messages' => ['controller' => 'AdminMessageController', 'action' => 'index'], '/admin/messages/view/(\d+)' => ['controller' => 'AdminMessageController', 'action' => 'view'], '/admin/messages/delete/(\d+)' => ['controller' => 'AdminMessageController', 'action' => 'delete'], '/admin/messages/status/(\d+)' => ['controller' => 'AdminMessageController', 'action' => 'updateStatus'], '/admin/service-requests' => ['controller' => 'AdminServiceRequestController', 'action' => 'index'], '/admin/service-requests/view/(\d+)' => ['controller' => 'AdminServiceRequestController', 'action' => 'view'], '/admin/service-requests/delete/(\d+)' => ['controller' => 'AdminServiceRequestController', 'action' => 'delete'], '/admin/service-requests/status/(\d+)' => ['controller' => 'AdminServiceRequestController', 'action' => 'updateStatus'], '/admin/price-quotes' => ['controller' => 'AdminPriceQuoteController', 'action' => 'index'], '/admin/price-quotes/view/(\d+)' => ['controller' => 'AdminPriceQuoteController', 'action' => 'view'], '/admin/price-quotes/delete/(\d+)' => ['controller' => 'AdminPriceQuoteController', 'action' => 'delete'], '/admin/price-quotes/status/(\d+)' => ['controller' => 'AdminPriceQuoteController', 'action' => 'updateStatus'], '/admin/posts' => ['controller' => 'AdminPostController', 'action' => 'index'], '/admin/posts/create' => ['controller' => 'AdminPostController', 'action' => 'create'], '/admin/posts/edit/(\d+)' => ['controller' => 'AdminPostController', 'action' => 'edit'], '/admin/posts/delete/(\d+)' => ['controller' => 'AdminPostController', 'action' => 'delete'], '/admin/price-list' => ['controller' => 'AdminPriceListController', 'action' => 'index'], '/admin/price-list/create' => ['controller' => 'AdminPriceListController', 'action' => 'create'], '/admin/price-list/edit/(\d+)' => ['controller' => 'AdminPriceListController', 'action' => 'edit'], '/admin/price-list/delete/(\d+)' => ['controller' => 'AdminPriceListController', 'action' => 'delete'], '/admin/upload-image' => ['controller' => 'AdminUploadController', 'action' => 'image'], // Public Routes '/' => ['controller' => 'HomeController', 'action' => 'index'], '/hakkimizda' => ['controller' => 'PageController', 'action' => 'about'], '/hizmetler' => ['controller' => 'ServiceController', 'action' => 'index'], '/hizmetler/([a-z0-9-]+)' => ['controller' => 'ServiceController', 'action' => 'show'], '/iletisim' => ['controller' => 'ContactController', 'action' => 'index'], '/iletisim/gonder' => ['controller' => 'ContactController', 'action' => 'send'], '/iletisim/servis-formu' => ['controller' => 'ContactController', 'action' => 'servisFormu'], '/iletisim/servis-formu/gonder' => ['controller' => 'ContactController', 'action' => 'servisFormuGonder'], '/iletisim/fiyat-teklifi' => ['controller' => 'ContactController', 'action' => 'fiyatTeklifi'], '/iletisim/fiyat-teklifi/gonder' => ['controller' => 'ContactController', 'action' => 'fiyatTeklifiGonder'], '/fiyat-listesi' => ['controller' => 'PageController', 'action' => 'priceList'], '/sirket-bilgileri' => ['controller' => 'PageController', 'action' => 'companyInfo'], '/cerez-politikasi' => ['controller' => 'PageController', 'action' => 'cookiePolicy'], '/gizlilik-politikasi' => ['controller' => 'PageController', 'action' => 'privacyPolicy'], '/hizmet-sozlesmesi' => ['controller' => 'PageController', 'action' => 'termsOfService'], '/kullanim-kosullari' => ['controller' => 'PageController', 'action' => 'termsOfUse'], '/kvkk-aydinlatma-metni' => ['controller' => 'PageController', 'action' => 'kvkkNotice'], '/mesafeli-satis-sozlesmesi' => ['controller' => 'PageController', 'action' => 'distanceSellingContract'], '/cozum-merkezi' => ['controller' => 'BlogController', 'action' => 'index'], '/cozum-merkezi/([a-z0-9-]+)' => ['controller' => 'BlogController', 'action' => 'show'], '/cozum-merkezi/([a-z0-9-]+)/([a-z0-9-]+)' => ['controller' => 'BlogController', 'action' => 'showByCategory'], '/cozum-merkezi/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)' => ['controller' => 'BlogController', 'action' => 'showByBrand'], '/sitemap.xml' => ['controller' => 'SitemapController', 'action' => 'index'], ]; } public function dispatch() { $uri = $this->getUri(); // Public klasöründeki statik dosyaları doğrudan erişime izin ver if (preg_match('#^/public/#', $uri)) { $filePath = APP_PATH . $uri; if (file_exists($filePath) && is_file($filePath)) { // Dosya türüne göre content-type belirle $ext = pathinfo($filePath, PATHINFO_EXTENSION); $mimeTypes = [ 'css' => 'text/css', 'js' => 'application/javascript', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', 'svg' => 'image/svg+xml', 'webp' => 'image/webp', 'ico' => 'image/x-icon', ]; if (isset($mimeTypes[$ext])) { header('Content-Type: ' . $mimeTypes[$ext]); } readfile($filePath); exit; } } $matched = false; foreach ($this->routes as $route => $params) { // Route'u regex'e çevir $pattern = '#^' . $route . '$#'; if (preg_match($pattern, $uri, $matches)) { $this->params = $params; array_shift($matches); // İlk elemanı kaldır (tam eşleşme) $this->params['matches'] = $matches; $matched = true; break; } } if (!$matched) { $this->notFound(); return; } $controller = $this->params['controller']; $action = $this->params['action']; // Controller dosyasını yükle $controllerFile = APP_PATH . '/app/controllers/' . $controller . '.php'; if (!file_exists($controllerFile)) { $this->notFound(); return; } require_once $controllerFile; if (!class_exists($controller)) { $this->notFound(); return; } $controllerInstance = new $controller(); if (!method_exists($controllerInstance, $action)) { $this->notFound(); return; } // Action'ı çalıştır call_user_func_array([$controllerInstance, $action], $this->params['matches'] ?? []); } private function getUri() { $uri = $_SERVER['REQUEST_URI'] ?? '/'; // Query string'i kaldır if (($pos = strpos($uri, '?')) !== false) { $uri = substr($uri, 0, $pos); } // Trailing slash'i kaldır (ana sayfa hariç) $uri = rtrim($uri, '/'); if (empty($uri)) { $uri = '/'; } return $uri; } private function notFound() { http_response_code(404); $view = new View(); $view->render('errors/404'); exit; } }