Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/43: Рейтинг темы: голосов - 43, средняя оценка - 4.86
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5

MVC - мой первый скрипт, оцените/исправьте/добавьте/прокомментируйте

07.12.2011, 16:37. Показов 9614. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, вот я погуглил, почитал всяких статей про MVC на PHP, поюзал немного фреймворк CodeIgniter, и решил что надо чтото в этом роде попробовать написать своё, вот и начал лепить, и щас выкладываю вам код того что налепил...
Зараннее прошу сильно не ругаться т.к. раньше никогда неписал скрипты на ООП, и неделю назад - вообще неимел понятие о том что такое MVC!!!

начну с файла .htaccess, расписывать ничего небуду, просто вот его содержимое:
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
Options -Indexes


RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
Далее, в корне сайта есть папка conf и cont - певая для конфигов, вторая для контроллеров...

файл index.php - в корне сайта:
PHP
1
2
3
4
5
6
7
8
9
10
11
ini_set('include_path', 'cont;conf');    
function __autoload($class)
{       
        $class=strtolower($class);
        require_once "$class.php";
        echo "<p>Сработала функция <strong>__autoload();</strong> - Загружен класс $class</p>";
}
 
 
$router=new Router();
$router->delegate();
тут, первой строкой указываем - из каких папок подключать классы, дальше функция autoload,
далее создаем обьект $router класса Router и вызываем метод delegate - который в свою очередь возьмет строку из $_GET['route'] разобьет её на куски и будет подгружать контроллерыи их методы с или без параметров...
Вот код класса Router, который находится в../conf/router.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Router
{
    public function delegate()
    {
        $this->get_controller($controller, $action, $vars);
        
        $cont = new $controller();
        if(!empty($action)&&!empty($vars))
        {$cont->$action($vars);}
        else{$cont->$action();}
    }
    
    private function get_controller(&$controller, &$action, &$vars)
    {
        $route_string=$_GET['route'];
        if(empty($route_string)){$route_string='index'; }
        
        $parts = explode('/', $route_string);
        
        if(empty($parts[0])){$controller='index';}
        else{$controller=$parts[0];}
        
        if(empty($parts[1])){$action='index';}
        else{$action=$parts[1];}
        
        if(empty($parts[2])){$vars=NULL;}
        else{$vars=$parts[2];}
        
    }
}
Дальше, для проверки работоспособности данной лепки, я создал два контроллера Home и Index и поместил и в папку ../cont/index.php, ../cont/home.php:

Вот контроллер Index:
PHP
1
2
3
4
5
6
7
class Index
{
    function index()
    {
        echo'<p>Вызван контроллер Индекс, по адресу: ..cont/index..</p>';
    }
}
Вот контроллер Home:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Home
{
    function index()
    {
        echo '<p>Контроллер Home - started</p>';  
    }
    
    function view_home($x=NULL)
    {
        echo '<p>Вызвана фуекция view_home, контроллера Home!!</p>';
        if($x!=NULL){echo '<p>Передан параметр Х='.$x.'</p>';}          
    }
}
}
контроллер Index - загружается по умолчанию - если переменная $_GET['route'] пустая...

в контроллере Home - есть функция index - которая работает если пуста переменная $action класса Router,
и есть функция view_home - которая может принимать параметр(по умолчанию - он = NULL) - здест тоже всё работает через delegate() класса Router.

Чудо, когда я вот так набираю в адресной строке http://localhost/home/view_home/variable, всё работает
а вот когда просто http://localhost/ - то контроллер Index - вызывается дважды........

Взглянув на этот код - сразу видно что это жесть,и первое что мне ненравится - это то что всем методам контроллеров мы можем передать только по одному параметру(который хранится в $vars) - а если надо больше - непойму как поступить,
но всёже я хочу услышать советы, поправки, и вообще может я всё тут неправильно сделал, жду ваших комментов...
Спасибо за внимание!!!
3
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2011, 16:37
Ответы с готовыми решениями:

Мой первый вывод новостей
Есть такое задание: 1. Создайте класс новостей для сайта. 2. Реализуйте страницу, на которой вы будете эти новости выводить...

Мой первый класс в ООП
Вот создал первый свой класс со свойством в ООП. class menu { public $get=&quot;&lt;a href='?f=1'&gt;Первый пункт&lt;/a&gt;&quot;; public...

Оцените код пожалуйста - правильно ли я понял ООП и MVC?
Здравствуйте! php изучаю уже три месяца, когда есть возможность. С ООП в php познакомился две неделии назад. До этого с ним немного имел...

57
 Аватар для boong
154 / 124 / 11
Регистрация: 11.01.2010
Сообщений: 434
15.12.2011, 17:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Ну и зря. У меня были случаи, когда на одном домене работало, а на другом рядом - нет.
На дэнвере, на одном компе, различие - название папки. А так - две копии.
Не знаю, с чем было связано.
Нужно правильно настраивать apache/nginx и приложения или скрипты писать грамотно .
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
15.12.2011, 17:21
Цитата Сообщение от boong Посмотреть сообщение
Нужно правильно настраивать apache/nginx и приложения или скрипты писать грамотно .
Нужно не страдать херней и писать велосипеды, а брать нормальный фрэймворк по душе и все.
Ни одна адекватная компания сейчас на своих PHP-велосипедах не работает. Либо это фрэймворк, либо CMS.

А дэнвер это вообще дело каждого. Я на CentOS работаю. Багов у меня нет.

Вообще, скрипты без фрэймворка надо использовать, IMHO, только в качестве демонов.
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
15.12.2011, 20:09  [ТС]
чтоб чемуто научиться, следует начать с велосипедов....
0
6 / 6 / 2
Регистрация: 08.11.2011
Сообщений: 23
16.12.2011, 00:35
Цитата Сообщение от Sanu0074 Посмотреть сообщение
public function delegate() { $this->get_controller($controller, $action, $vars); if(($controller==NULL or $controller=='index') && $action==NULL && $vars==NULL){$cont=new index();} else if($controller!=NULL && $action==NULL && $vars==NULL){$cont=new $controller();$cont->index();} else if($controller!=NULL && $action!=NULL && $vars==NULL){$cont=new $controller();$cont->$action();} else if($controller!=NULL && $action!=NULL && $vars!=NULL){$cont=new $controller();$cont->$action($vars);} }
http://ru.php.net/Reflection
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
16.12.2011, 10:39
Цитата Сообщение от Sanu0074 Посмотреть сообщение
чтоб чемуто научиться, следует начать с велосипедов....
Однозначно, нет. Лучше сразу идти по правильному пути, нежели делать все не так.
0
6 / 6 / 2
Регистрация: 08.11.2011
Сообщений: 23
16.12.2011, 10:43
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Однозначно, нет. Лучше сразу идти по правильному пути, нежели делать все не так.
Вы абсолютно не правы, велосипеды это именно тот правильный путь, по которому надо идти. Отсюда приходят знания. Никак по-другому.

Есть большая разница, между человеком, который может реализовать некий функционал фреймворка, и человеком который в состояние клепать только модули, к чему-то готовенькому.
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
16.12.2011, 11:24
Я ведь не просто так говорю, наверное
Я учился писать на PHP с Zend Framework. Сейчас могу написать абсолютно любой функционал и сам.
Учить начал в феврале 2009, кажется. И я очень рад, что я не стал писать велосипедов.

Многие вещи не нуждаются в понимании в начале. Можно кодить зная лишь что вернет нужная функция. Когда вдруг понадобится понимание реализации - вот тогда смотрите.

Тем более, что, в большинстве случаев, в начале программист, изучающий язык самостоятельно, идет не правильным путем.

+ вы никуда не денетесь от MVC и ООП. Точнее, от первого, возможно и денетесь, но от второго - точно нет.

Тогда зачем вам писать свои велосипеды, если они не верны в корне?
Посмотрите на чужой велосипед и сделайте свой лучше.
Почитайте про паттерны. Про ООП. Про MVC. Про кэширование.

И вот тогда, возможно вы станете не тем, на кого с презрением тычут пальцем, мол - PHPшник (а тычут как раз поэтому ), а настоящим веб-девелопером.

Ну и за одно сразу почитайте про SOAP, JSON, AJAX.

Ну и главное (на начальном уровне) перестаньте писать запросы к БД руками.
Запросы руками надо писать в high-load, либо когда уже освоитесь как ответ от БД правильно выводить через PHP.

А так сами себе суете палки в колеса.

Суть - не пиши велосипед с нуля, возьми чужой, проверенный временем каркас.
1
 Аватар для boong
154 / 124 / 11
Регистрация: 11.01.2010
Сообщений: 434
16.12.2011, 14:00
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Ни одна адекватная компания сейчас на своих PHP-велосипедах не работает. Либо это фрэймворк, либо CMS.
Да от части согласен, тут понятно почему компании предпочитают уже готовые фрэймворки, не всегда правда так. Я просто изначально не стал отвечать и доводить почему Вы не правы для того что бы не разводить тут оффтоп.

Цитата Сообщение от KoIIIeY Посмотреть сообщение
Многие вещи не нуждаются в понимании в начале. Можно кодить зная лишь что вернет нужная функция. Когда вдруг понадобится понимание реализации - вот тогда смотрите.
Тут не согласен, если ты понимаешь как и каким образом работает функция или система, от этого хуже не будет, а в общем с одной стороны понятно почему Вы так думаете, и выше или не можете или не хотите смотреть, я не буду приводить примеры когда поступать так не лучший вариант, не хочю тратить своё время на то чтобы довести Вам KoIIIeY что то в этом вопросе, есть более важные вопросы над которыми нужно работать "ничего личного".
Ваша позиция ясна! но и поступайте так как считаете правильно.
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
16.12.2011, 14:07
Цитата Сообщение от boong Посмотреть сообщение
Тут не согласен, если ты понимаешь как и каким образом работает функция или система, от этого хуже не будет
Проблема в другом
Никто кроме разработчиков не понимает, как работает функция.

Обьясните мне, почему вы используете date('Y-m-d'); заместо своего аналога получения даты?
Вы ведь хотите сделать свой велосипед.
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
16.12.2011, 18:25  [ТС]
boong, вполне согласен

Добавлено через 2 минуты
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Обьясните мне, почему вы используете date('Y-m-d'); заместо своего аналога получения даты?
Вы ведь хотите сделать свой велосипед.
это совсем уже оффтоп, еще б предложил бы придумать чтото вместо echo для вывода....
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
17.12.2011, 11:04
KoIIIeY,

Не по теме:

все верно говоришь брат

1
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
17.12.2011, 11:21
Цитата Сообщение от Sanu0074 Посмотреть сообщение
это совсем уже оффтоп, еще б предложил бы придумать чтото вместо echo для вывода....
Ладно, подрастете как программисты, поймете мою точку зрения.

P.S. так можно делать вывод и кроме echo. Можно такую систему замутить, что ни одного echo не будет, но будет работать.
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
17.12.2011, 13:16
Pltcm
Цитата Сообщение от Sanu0074 Посмотреть сообщение
но всёже я хочу услышать советы, поправки, и вообще может я всё тут неправильно сделал, жду ваших комментов...
сделал всё правильно только не реализовал самой сути MVC, Контроллер есть, модель есть. А где остальное то?
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
17.12.2011, 14:03  [ТС]
Цитата Сообщение от Sulik78 Посмотреть сообщение
А где остальное то?
это только начало, вот и подвис на подгрузке модели...

Добавлено через 17 минут
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Ладно, подрастете как программисты, поймете мою точку зрения.
Я думаю что ты просто любитель похвастаться, типа я тут мега крутой гуру, куда вам до меня, а на самом деле абсолютный NULL. (p.s. Посмотрел всю тему, ты даже незнал что в PHP 5 - по умолчанию все методы "public", ты вообще понятия не имел про call_user_func_array, и + ни один из твоих советов небыл верный на 100%, вывод: трипло)
Зачем пытаться чегото доказать если сам невывозиш в этой теме,(дал совет, если непомог сиди молча и думай дальше над вариантами если тебе это интересно), форум создан для того что бы давать советы и помогать решать задачи, но никак не для того чтоб показать "Какой я крутой программист, я во всём шарю, а не то что вы все!!"
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
17.12.2011, 14:48
Sanu0074, КЭП
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
18.12.2011, 18:58
Цитата Сообщение от Sanu0074 Посмотреть сообщение
это только начало, вот и подвис на подгрузке модели...

Добавлено через 17 минут


Я думаю что ты просто любитель похвастаться, типа я тут мега крутой гуру, куда вам до меня, а на самом деле абсолютный NULL. (p.s. Посмотрел всю тему, ты даже незнал что в PHP 5 - по умолчанию все методы "public", ты вообще понятия не имел про call_user_func_array, и + ни один из твоих советов небыл верный на 100%, вывод: трипло)
Зачем пытаться чегото доказать если сам невывозиш в этой теме,(дал совет, если непомог сиди молча и думай дальше над вариантами если тебе это интересно), форум создан для того что бы давать советы и помогать решать задачи, но никак не для того чтоб показать "Какой я крутой программист, я во всём шарю, а не то что вы все!!"
Да, в общем-то, мне наплевать.
Я тебе сказал, как делать хорошо, а как плохо. Это мое личное мнение.

Если мои советы не работают - то это потому, что ты сам нихрена сделать не можешь.
Я даю наводку на решение, а не реализацию.
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
18.12.2011, 19:24  [ТС]
Цитата Сообщение от KoIIIeY Посмотреть сообщение
Да, в общем-то, мне наплевать.
ну да, я еслиб знал то мне б советы ненужны были, а ты в очередной раз показываеш своё я...
0
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 10
20.12.2011, 18:59
попробуй обновить сервер!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.12.2011, 18:59

Оцените мой код. Знания в Веб технологиях у меня не маленькие и опыт тоже!
Ребят, нет времени объяснять, вообщем оцените мой код. Есть база данных с таблицей аккаунтов, в ней 10.000 записей, вот я короче делаю...

Оцените мой первый урок по С++
Тут вот недавно приспичило урок по С++ написать. Сделано, а вот понять что за зверек получился надо (я про вас). Стоит ли продолжать или я...

Оцените мой первый сайт на php
Здравствуйте,cоздал первый сайт на php дайте какие нибудь советы по дизайну и другим дороботкам ,форум сайта еще не заполнен так как я сайт...

Проверка на дырки, мой первый работоспособный скрипт регистрации и авторизации
Привет всем. Значит так, я новичок во всем этом(программирование). Я написал скрипт авторизации и регистрации. Вот интересно в нем...

Исправьте/добавьте, пожалуйста, в программе код, чтобы стала работающей
Среднее из чётных положительных элементов. Сформировать новый динамический массив из косинусов отрицательных элементов, подсчитав их число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru