PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 13
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 21:30:51 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
KingStar пишет: следует разбить весь класс на методы, что если тебе понадобится имя контроллера??? либо отдельно проверить правило??? а как быть если я не передам контроллер или метод???
Согласен!
---> либо отдельно проверить правило???
Моя проблема щас стоит в составление как раз правил (не хочу налажать).
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 20:09:23 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
Мой Router.php
PHP:
скопировать код в буфер обмена
class Router
{
public function run( )
{
/**
* URL pattern default routes:
* http://example.com/controller/action/param1/param2/param3
*/
'^(.*)$' => 'category/view/$1' ,
'^/shop/(.*)$' => 'shop/category/$1'
) ;
$uri = $this -> Request -> getURI ( ) ;
// Пытаемся применить к нему правила из конфигуации.
foreach ( $this -> routes as $pattern => $route )
{
// Если правило совпало.
{
// Получаем внутренний путь из внешнего согласно правилу.
// Разбиваем внутренний путь на сегменты.
$segments = explode ( '/' , $internalRoute ) ;
// Первый сегмент — контроллер.
// Второй сегмент— действие (метод)
// Остальные сегменты — параметры.
$parameters = $segments ;
// Инклудим файл с классом контроллера
$controller_file = strtolower ( $controller_name ) . EXT
;
// Путь к контролеру модуля
$controller_path = $module_path = 'modules' . SEP . $controller_name . SEP . $controller_file ;
{
require_once $controller_path ;
}
else
{
}
// Cоздаем контроллер
$controller = new $controller_name ;
$action = $action_name ;
{
// Если есть передаваемые параметры для метода
if ( $parameters )
{
}
// Если есть НЕТ передаваемые параметры для метода
else
{
$controller -> $action ( ) ;
}
}
else
{
}
break ;
}
}
}
}
$router = new Router( ) ;
$router -> run ( ) ;
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 19:55:07 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
Okula пишет: Если использовать ЧПУ то придётся отказаться от передачи данных через форму меодом GET, так как они будут автоматически дописываться в адрес портя всю концепцию.
Как этого избежать?
Дописывать GET параметры которые портят всю картину нужно в большинстве тогда когда сайт использует какие то фильтра, скажем в интернет-магазине. А то если писать под ниж правила голова может лопнуть
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 19:40:23 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
Мой .htaccess
PHP:
скопировать код в буфер обмена
AddDefaultCharset UTF- 8
RewriteEngine On
RewriteCond % { REQUEST_FILENAME} !- f
RewriteCond % { REQUEST_FILENAME} !- d
RewriteRule ! ^( p/| favicon\. ico| robots\. txt| sitemap\. xml| sitemap\. xml\. tgz) index. php [ L]
(Добавление)
Вот думаю не ужели нужно делать проверку на существования такой папки если папка есть тогда продуем создать экземпляр класса и загрузить контролер модуля, ели нет тогда проверяем есть ли такие записи в таблицах категории или страниц.
Поправьте если не верно мыслю
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 19:36:49 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
KingStar пишет: впревые слышу, открой htaccess любого фреймворка, по твоим словам они все утарели??? значит в ногу со временем у нас только один ты идешь)))
Я имею виду такой пример:
.htaccess
PHP:
скопировать код в буфер обмена
#...
# Каталог товаров
RewriteRule ^catalog/ ( [ ^/ ] + ) / ?$ index. php?module= ProductsView& category= $1 [ L, QSA]
RewriteRule ^catalog/ ( [ ^/ ] + ) / ( [ ^/ ] + ) / ?$ index. php?module= ProductsView& category= $1 & brand= $2 [ L, QSA]
RewriteRule ^products/ ( [ ^/ ] + ) / ?$ index. php?module= ProductView& product_url= $1 [ L, QSA]
RewriteRule ^products/ ?$ index. php?module= ProductsView [ L, QSA]
RewriteRule ^brands/ ( [ ^/ ] + ) / ?$ index. php?module= ProductsView& brand= $1 [ L, QSA]
RewriteRule ^brands/ ( [ ^/ ] + ) / page_( [ ^/ ] + ) / ?$ index. php?module= ProductsView& brand= $1 & page= $2 [ L, QSA]
# Поиск товаров
RewriteRule ^search/ ( [ ^/ ] + ) / ?$ index. php?module= ProductsView& keyword= $1 [ L, QSA]
RewriteRule ^search/ ?$ index. php?module= ProductsView [ L, QSA]
# Блог
RewriteRule ^blog/ ( [ ^/ ] + ) / ?$ index. php?module= BlogView& url= $1 [ L, QSA]
RewriteRule ^blog/ ?$ index. php?module= BlogView [ L, QSA]
#...
.....
Fedak.o.b
Отправлено: 27 Сентября, 2012 - 19:25:14 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
Хорошо ребята)), хватит разводить сплетни )
Если такая активность на ответы хотелось бы тогда расширить данную тему.
Думаю начать будет хорошо с самого начала =)
-------------------------------- -------------------------------- ----------------------------
Index.php - Главный файл через через него должно все проходить. Понятно что в нем хорошо содержать константы и другие настройки. Также он должен подключать через инклуд файл-класс Router.
-------------------------------- -------------------------------- ----------------------------
Router.php - служить для обработки адресной строки и с полученных данных создавать экземпляр класса, загружать необходимые файлы (скажем контроллер модуля)
А теперь вопрос. Думаю у всех он когда то возникал.
Какими макаром должен обрабатывать данные URL.
- Можно через регулярные выражения создавать правила в .htaccess (слышал что этот метот застарел, не знаю правда ли это)
- Можно те же правила с регулярным выражениям создавать в файле класса Router
- А можно и без правил обойтись.
Тут думаю дело уже будет зависит от дальнейшей структуры построения системы.
-------------------------------- -------------------------------- ----------------------------
Я выбрал второй пункт. Хочу это тему больше раздутость потому что в принципе так званные чпу, нужны не так программистам, а сеошникам. Ну и настало время что без этого не обойтись.
Я решил не отставать и все переделать свою систему.
Моя первая скажем цмс нормально справляется с загрузкой категорий и страниц урл вида:
www[dot]site[dot]com/index.php?cid=12
Для современных систем это не приветствуется.Современный аналог моего может выглядит:
1. www[dot]site[dot]com/novosti_i_akcii/vuboru_mera
(Где novosti_i_akcii категория, vuboru_mera - страница или та же категория)
2. www[dot]site[dot]com/auth
(Где auth категория, или страница или модуль скажем авторизации)
Таким образом достает вопрос. Как же составить регулярные чтоб распознаватель какой екземпляр модуля нужно создавать и какой контролер модуля нужно подгружать.
Начал делать писать регулярные и практически сразу остановился, зашел в тупик
Как в моем случае написать нормальные маски для обработки и делаю все ли я верно ?
Fedak.o.b
Отправлено: 26 Сентября, 2012 - 10:38:54 • Тема: Помогите построить ядро на MVC • Форум: Объектно-ориентированное программирование
Ответов: 51 Просмотров: 10612
Есть необходисомость построить ядро системы на MVC.
По моем понимание MVC построил ядро так:
index.php
PHP:
скопировать код в буфер обмена
// The PHP file extension
//
define ( 'SEP' , DIRECTORY_SEPARATOR ) ;
// Узнаём путь до файлов сайта
//
define ( 'SITEPATH' , $sitepath ) ;
require_once 'core' . SEP . 'Controller' . EXT;
Controller.php
PHP:
скопировать код в буфер обмена
require_once 'core' . SEP . 'Gent' . EXT;
require_once 'core' . SEP . 'Router' . EXT;
class Controller extends Router
{
public function __construct( )
{
parent:: __construct( ) ;
}
}
new Controller( ) ;
Router.php
PHP:
скопировать код в буфер обмена
class Router extends Load
{
public $module_name ;
public function __construct( )
{
$this -> module_name = $this -> Request -> getController ( ) ;
//$this->router_action = $this->request->getAction();
//
$this -> loadController -> ( $this -> module_name ) ;
}
}
Load.php
PHP:
скопировать код в буфер обмена
/**
* Класс автоматическое создает объект
*/
require_once 'core' . SEP . 'Registry' . EXT;
class Load extends Registry
{
private static
$objects = array ( ) ;
public function __construct( ) { }
/**
* Магический метод, создает нужный объект
*/
public function __get( $name )
{
// Если такой объект уже существует, возвращаем его
if ( isset ( self :: $objects [ $name ] ) ) {
return ( self :: $objects [ $name ] ) ;
}
$class_name = $name ;
include 'core' . SEP . $class_name . EXT;
self :: $objects [ $name ] = new $class_name ( ) ;
// Возвращаем созданный объект
return self :: $objects [ $name ] ;
}
}
Registry.php
PHP:
скопировать код в буфер обмена
class Registry
{
protected static
$store = array ( ) ; protected function __construct( ) { }
protected function __clone( ) { }
public static function exists( $name )
{
return isset ( self :: $store [ $name ] ) ; }
public static function get( $name )
{
return ( isset ( self :: $store [ $name ] ) ) ?
self :: $store : null ; }
public static function set( $name , $obj )
{
return self :: $store [ $name ] = $obj ;
}
public static function remove( $name )
{
unset ( self :: $store [ $name ] ) ; }
}
Request.php
PHP:
скопировать код в буфер обмена
// http://amdy.su/class-request/
class Type {
const T_ARRAY = 'array' ;
const T_BOOLEAN = 'boolean' ;
const T_INTEGER = 'integer' ;
const T_FLOAT = 'float' ;
const T_STRING = 'string' ;
const T_OBJECT = 'object' ;
static public function toArray( $value ) {
}
static public function toBoolean( $value ) {
return ( boolean) $value ;
}
static public function toInteger( $value ) {
return ( int) $value ;
}
static public function toFloat( $value ) {
}
static public function toString( $value ) {
return ( string) $value ;
}
static public function toObject( $value ) {
return ( object) $value ;
}
}
class Request {
private $_url ;
private $_part = array ( ) ; private static $_instance ;
protected $_controller ;
protected $_action ;
/**
* @param string $url
* @return Request
*/
public static function singleton( $url = null ) {
if ( ! self :: $_instance ) {
self :: $_instance = new Request( $url ) ;
}
return self :: $_instance ;
}
public function __construct( $url = null ) {
if ( ! $url ) {
$url = $_SERVER [ 'REQUEST_URI' ] ;
}
foreach ( explode ( '/' , $this -> _url
) as $k => $v ) { $this -> _part[ ] = $v [ 0] ;
} else {
}
}
}
$this -> _controller = $this -> get ( 0 , 'main' ) ;
if ( ! preg_match ( '~^[a-z]+[a-z0-9_-]*$~' , $this -> _controller
) ) { $this -> _controller = 'error' ; // 'error'
}
$this -> _action = $this -> get ( 1 , 'main' ) ;
if ( ! preg_match ( '~^[a-z]+[a-z0-9_-]*$~' , $this -> _action
) ) { $this -> _action = 'error404' ;
}
}
/**
* return value from request
* get(0),
* get(0, 'default', Type::T_STRING)
* get('test', 0, Type::T_INTEGER)
* @param string $key
* @param mixed $default
* @param string $type
* @return mixed
*/
public function get( $key , $default = null , $type = null ) {
if ( isset ( $this -> _part
[ $key ] ) ) { if ( $type ) {
} else {
}
} else {
return $this -> _part[ $key ] ;
}
} else {
if ( is_object ( $default ) && $default instanceof Exception
) { throw $default ;
} else {
return $default ;
}
}
}
public function has( $key ) {
return isset ( $this -> _part
[ $key ] ) ; }
public function getController( ) {
return $this -> _controller;
}
public function getAction( ) {
return $this -> _action;
}
public function isAjax( ) {
if ( $this -> get ( 'ajax' ) == 1) {
return true ;
} elseif ( isset ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ] ) && $_SERVER [ 'HTTP_X_REQUESTED_WITH' ] == 'XMLHttpRequest' ) {
return true ;
} else {
return false ;
}
}
}
Подскажите, что может не правильно построено (лучше знать изначально)
В дальнейшем есть желание прикрутить ORM propel и Смарти.
Но пока не могу логически спроектировать взаимодействия в самом начале, много мыслей и не знаю какие с них правильные а какие нет.
Дальнейшее развитие вижу в в классе "Router", так что он передает параметры классу (он еще не создан), которые будет загружать необходимый модуль с триадой (MVC).
Fedak.o.b
Отправлено: 27 Июля, 2012 - 14:50:14 • Тема: Пишу страницу в UTF-8 отображаются кракозябры • Форум: SQL и Архитектура БД
Ответов: 21 Просмотров: 83
СоветскийКод пишет: СоветскийКод
Когда то тоже была такая проблема с кодировкой!
1. В файле httpd.conf ставим AddDefaultCharset utf-8
2. В самом главном файле (index.php), первой строкой прописываем:
PHP:
скопировать код в буфер обмена
<?PHP
header ( 'Content-type: text/html; charset=UTF-8' ) ; // дале тело документа
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
...
3. Дале все вайлы Преобразовать в UTF-8 без BOM . Для данных действий использую редактор notepad++
4. Если используется база данных тогда в конфигурационном файле где идет подключение к бд дописать:
И обязательно нужно сменить кодировку в самих таблицах вашей базы на utf8_general_ci
Должно помочь
Fedak.o.b
Отправлено: 13 Октября, 2011 - 13:34:21 • Тема: Начал изучать ООП • Форум: Объектно-ориентированное программирование
Ответов: 9 Просмотров: 3355
Я убрал совсем __construct в класе News ?,
создал метод outputNews() :
PHP:
скопировать код в буфер обмена
function outputNews( $idnews , $idrybruka , $iduser , $title , $text , $date )
{
$this -> idnews = $idnews ;
$this -> idrybruka = $idrybruka ;
$this -> iduser = $iduser ;
$this -> title = $title ;
$this -> text = $text ;
$this -> date = $date ;
}
Создание объека винес за цикл:
потом обращаюся к методу созданого объекта уже в цикле
PHP:
скопировать код в буфер обмена
$outPut [ ] = $obj -> outputNews ( $row [ 'idnews' ] , $row [ 'idrybruka' ] , $row [ 'iduser' ] , $row [ 'title' ] , $opus , $row [ 'date' ] ) ;
и на выходе ничего не получаю, почему?
Fedak.o.b
Отправлено: 13 Октября, 2011 - 12:03:27 • Тема: Начал изучать ООП • Форум: Объектно-ориентированное программирование
Ответов: 9 Просмотров: 3355
Добрый день!
Вот недавно начал изучать ОО, и еще не очень все понимаю как реализовать.
Для начал чтоб проверить как усвоился материал параллельно делал новостную ленту.
Так вот, меньше слов больше к теме вопроса.
Вот сам мой пример):
news.php
PHP:
скопировать код в буфер обмена
<?PHP
include "config.php" ;
class News
{
public $idnews ; // Індитифікатор новини
public $idrybruka ; // Індитифікатор рубрики
public $iduser ; // Індитифікатор автора
public $title ; // Заголовок
public $text ; // Текст
public $date ; // Дата private
function __construct( $idnews , $idrybruka , $iduser , $title , $text , $date )
{
$this -> idnews = $idnews ;
$this -> idrybruka = $idrybruka ;
$this -> iduser = $iduser ;
$this -> title = $title ;
$this -> text = $text ;
$this -> date = $date ;
}
}
class NewsBD
{
private $outPut ;
function __construct( )
{
}
function Select( $news_id = False )
{
$sql = "SELECT `idnews`, `idrybruka`, `iduser`, `title`, `min_text`, `max_text`, `date` FROM `news` WHERE `active`='1'" ;
( $news_id ) ? $sql .= "AND `idnews`='{$news_id} '" : $sql .= "ORDER BY `idnews` DESC" ;
{
( $news_id ) ? $opus = $row [ 'max_text' ] : $opus = $row [ 'min_text' ] ;
$outPut [ ] = new News( $row [ 'idnews' ] , $row [ 'idrybruka' ] , $row [ 'iduser' ] , $row [ 'title' ] , $opus , $row [ 'date' ] ) ;
}
return $outPut ;
}
}
?>
index.php
PHP:
скопировать код в буфер обмена
<?PHP
require_once "includes/functions.php" ;
require_once "includes/News.php" ;
// Створуємо об'єкт Новини
$obj = new NewsBD( ) ;
$news_id = ( int) $_GET [ 'id' ] ;
$news = $obj -> Select ( $news_id ) ;
echo ( empty ( $news ) ) ?
"(новини не існує)" : false ;
for ( $i = 0 ; $i < count( $news ) ; $i ++ )
{
echo
"<strong>{$news [$i ]->title}</strong><br>" ,
"{$news [$i ]->text}<br>" ,
"<code>Дата: {$news [$i ]->date}</code><br>" ,
"<a href=\" " . ( empty ( $news_id ) ?
"index.php?id={$news [$i ]->idnews}" : redirect
( ) ) . "\" >" . ( empty ( $news_id ) ?
"Детальніше" : "Назад" ) . "</a><hr>" ; }
?>
Вопрос:
1. В файле News.php в классе NewsBD , создаем объект News , и соответствующими параметрами, вопрос состоит в том рентабельно ли создавать объект в цикле while, или лутше создание объекта News , в классе NewsBD перед циклом while, и переписать класс так чтоб каждое свойство имело свой метод, и обращаться уже не к объекту, а к его методам.
2. И еще, правильно ли я написал дизайн кода по отношнию к паттерн(ООП).
Зарание спасибо!
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB