Пытаюсь разобраться с технологией MVC. Браузер выдаёт ошибку 500 (ошибка сервера)
На сайте есть такие документы (соединены между собой):
Домен karandash-konversii.ru
(исправлено модератором, слишком много ссылок мало относящихся к вопросу)
Домен/.htaccess
В нём код такой:
AddDefaultCharset CP1251
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php
Домен/index.php
В нём такой код:
<?php
ini_set('display_errore', 1);
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/router.php');
$router = new Router();
$router->run();
?>
Домен/components/router.php
[SIZE=medium]В нём такой код:[/SIZE]
<?php
class Router {
private $routes;
public function __construct() {
$routesPath = ROOT.'/config/routes.php';
$this->routes = include($routesPath);
}
private function getURI {
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run() {
$uri = $this->getURI();
foreach($this->routes as $uriPattern=>$path) {
if (preg_match("~$uriPattern~", $uri)) {
$segments = explode('/', $path);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst(array_shift($segments));
$controllerFile = ROOT.'/controllers/'.$controllerName.'.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName();
if ($result != null) {
break;
}
}
}
}
}
?>
Домен/config/routes.php
В нём такой код:
<?php
return array('news'=>'news/index', 'products'=>'product/list');
?>
Домен/controller/NewsController.php
В нём такой код:
<?php
class NewsController {
public function actionIndex() {
echo 'NewsController actionIndex';
return true;
}
}
?>
Домен/controller/ProductController.php
В нём такой код:
<?php
class ProductController {
public function actionList() {
echo 'ProductController actionList';
return true;
}
}
?>
При этом замечу, что при переходе на другие файлы, браузер выдаёт ошибку 404, несмотря на то, что в файле .htaccess я сделал перенаправление при всех запросах на файл index.php. Может ошибка в этом документе?
И ещё, я не совсем понимаю, как работает элемент «__FILE__» в строке:
define('ROOT', dirname(__FILE__));
Кто-нибудь знает, где можно достать информацию по этому элементу?
На сайте есть такие документы (соединены между собой):
Домен karandash-konversii.ru
(исправлено модератором, слишком много ссылок мало относящихся к вопросу)
Домен/.htaccess
В нём код такой:
AddDefaultCharset CP1251
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php
Домен/index.php
В нём такой код:
<?php
ini_set('display_errore', 1);
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/router.php');
$router = new Router();
$router->run();
?>
Домен/components/router.php
[SIZE=medium]В нём такой код:[/SIZE]
<?php
class Router {
private $routes;
public function __construct() {
$routesPath = ROOT.'/config/routes.php';
$this->routes = include($routesPath);
}
private function getURI {
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run() {
$uri = $this->getURI();
foreach($this->routes as $uriPattern=>$path) {
if (preg_match("~$uriPattern~", $uri)) {
$segments = explode('/', $path);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst(array_shift($segments));
$controllerFile = ROOT.'/controllers/'.$controllerName.'.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName();
if ($result != null) {
break;
}
}
}
}
}
?>
Домен/config/routes.php
В нём такой код:
<?php
return array('news'=>'news/index', 'products'=>'product/list');
?>
Домен/controller/NewsController.php
В нём такой код:
<?php
class NewsController {
public function actionIndex() {
echo 'NewsController actionIndex';
return true;
}
}
?>
Домен/controller/ProductController.php
В нём такой код:
<?php
class ProductController {
public function actionList() {
echo 'ProductController actionList';
return true;
}
}
?>
При этом замечу, что при переходе на другие файлы, браузер выдаёт ошибку 404, несмотря на то, что в файле .htaccess я сделал перенаправление при всех запросах на файл index.php. Может ошибка в этом документе?
И ещё, я не совсем понимаю, как работает элемент «__FILE__» в строке:
define('ROOT', dirname(__FILE__));
Кто-нибудь знает, где можно достать информацию по этому элементу?