<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Маршрутизатор
29.12.2014 01:39:44 Маршрутизатор Сообщение #1
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Здравствуйте.
Решил создать свой движок для сайта. Вот возникла такая проблема: писал маршрутизатор для перенаправления юзера по страницам и выходит, что чтоб добавить новую ключевую страницу на сайт, надо залазить в файл и править его. Никак не могу придумать, как это исправить. Подскажите, как сделать роутер более динамичным??

Собственно, код:
<?php
class Router extends DataBase {
/*
  $link -> ури страницы, к которой обращается пользователь
  $page -> номер страницы из ГЕТ-запоса
 */
public function __construct($link, $page) {
parent::__construct(Config::HOST, Config::USER, Config::PASSWORD, Config:: DATABASE, Config::PREFIX);
$article_link = parent::selectCell("articles", "link", "link", $link);
switch ($link) {
   // ключевые страницы-разделы (категории)
case "/":
case "/html-css.html":
case "/php-mysql.html":
case "/javascript.html": {
ActionSection::__construct($link, $page);
} break;
   // ключевая страница: об авторе
case "/about-autor.html": {
ActionAutor::__construct($link);
} break;
   // К. С. -> поиск
case "/search.html": {
ActionSearch::__construct($link);
} break;
   // К.С. статья
case $article_link["link"]: {
ActionArticle::__construct($link);
} break;
   // К.С. 404-страница
default: {
ActionNotFound::__construct();
}
}
}

}
?>
Профиль Ответить
16.01.2015 13:12:17 Маршрутизатор Сообщение #2
Dersint

Dersint

Новичок

Новичок

Дата регистрации:
21.12.2014 18:39:47

Сообщений: 5

Архитектура класса не совсем правильна в том смысле, что класс является потомком DataBase. Нужно создать экземпляр класса в Router, но никак не наследовать.
Профиль Ответить
16.01.2015 13:45:25 Маршрутизатор Сообщение #3
Dersint

Dersint

Новичок

Новичок

Дата регистрации:
21.12.2014 18:39:47

Сообщений: 5

Можно сделать такой роутер<?php
include "database_class.php";

class Router{

private $db;
private $config;
public $action;
public $controller;

public function __construct(){
$this->db = DataBase::connect();
//Подключаемся к бд. Класс для работы с БД устроен на подобии данного класса http://myrusakov.ru/php-db-class.html
$uri = $this->getAdress($_SERVER['REQUEST_URI']);
$this->action = htmlspecialchars($uri['action']);
$this->controller = htmlspecialchars($uri['controller']);
if(!file_exists("./controllers/"$this->controller.".php" )) $this->error404();
//Если нет такого контроллера, то 404
require_once "./controllers/"$this->controller.".php";
}

public function getAdress($uri){
$uri = trim("/",$uri); //Убираем слэши. То есть преобразуем /articles/article-1/ в articles/article-1
if($url == "" ) return array("action" => "index","controller" => "index" );
//Если ури пуст, то это индексная страница
$array = explode("/",$uri); //Разбиваем на массив по слэшу
switch(count($array)){
case 2:
return array("action" => $array[1], "controller" => $array[0]);
//Если получили адрес типа: rubric/html, то rubric - это контроллер, а html - это страница
case 1:
return array("action" => $array[0], "controller" => "indexController" );
//Если ури типа: /about, то контроллер тот же, что и у индексной страницы, то есть тип страницы тот же.
default:
$this->error404();
//если ури такой: iindex/about/page/article, то редирект на 404
}
}

public function error404(){
header("HTTP/1.0 404 Not Found" );
header("http://mysite.loc/system/404" );
}
}
?>
Что касается самого контроллера, то можно реализовать например, реализовать выборку записи так: имя контроллера - это название таблицы без префикса, а экшн - это название записи. То есть запрос будет выглядеть так
<?php
$query = "SELECT * FROM `prefix_{?}` WHERE `name` = '{?}'";
$db->selectCell($query, array($this->controller,$this->action));
?>
То есть при ури, равном articles/denwer-php
Вытащится запись из таблицы articles, где поле name равно denwer-php, но если такой таблицы нет, или же нет записи, то 404. Это уже пропишите  контроллере.
Думаю, я помог Вам. Удачи в написании движков.
Профиль Ответить
21.05.2015 21:14:05 Маршрутизатор Сообщение #4
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Спасибо, большое. Очень помогли))
Профиль Ответить