Организация ЧПУ в htaccess

fixxxer

К.О.
Партнер клуба
Если ты не в состоянии разобраться с 20 строчками кода, то стоит купить учебник.
 

imediasun

Новичок
Я нашел такой вариант но наверное подключаю не правильно
дает ошибку
Fatal error: Cannot redeclare class uSitemap in /var/www/clients/client1/web28/web/index.php on line 19
укажите что я не так сделал, уверен здесь ошибки новичка каковым я и являюсь

require_once('Main.php');
$object= new Main();

/**
* Sitemap (можно перенести в отдельный файл)
*/
$GLOBALS['sitemap'] = array (
'_404' => 'page404.php', // Страница 404</span>
'/' => 'index.php', // Главная страница
'/users' => 'Users.php', // Новости - страница без параметров
'/stories(/[0-9]+)?' => 'storypage.php', // С числовым параметром
// Больше правил
);
// Код роутера
class uSitemap {
public $title = '';
public $params = null;
public $classname = '';
public $data = null;
public $request_uri = '';
public $url_info = array();
public $found = false;
function __construct() {
$this->mapClassName();
}
function mapClassName() {
$this->classname = '';
$this->title = '';
$this->params = null;
$map = &$GLOBALS['sitemap'];
$this->request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$this->url_info = parse_url($this->request_uri);
$uri = urldecode($this->url_info['path']);
$data = false;
foreach ($map as $term => $dd) {
$match = array();
$i = preg_match('@^'.$term.'$@Uu', $uri, $match);
if ($i > 0) {
// Get class name and main title part
$m = explode(',', $dd);
$data = array(
'classname' => isset($m[0])?strtolower(trim($m[0])):'',
'title' => isset($m[1])?trim($m[1]):'',
'params' => $match,
);
break;
}
}
if ($data === false) {
// 404
if (isset($map['_404'])) {
// Default 404 page
$dd = $map['_404'];
$m = explode(',', $dd);
$this->classname = strtolower(trim($m[0]));
$this->title = trim($m[1]);
$this->params = array();
}
$this->found = false;
} else {
// Found!
$this->classname = $data['classname'];
$this->title = $data['title'];
$this->params = $data['params'];
$this->found = true;
}
return $this->classname;
}
}
$sm = new uSitemap();
$routed_file = $sm->classname; // Получаем имя файла для подключения через require()
require($routed_file); // Подключаем файл
// P.S. Внутри подключённого файла Вы можете использовать параметры запроса,
// которые хранятся в свойстве $sm->params

function index(){
$object->view('preheader_view');
$object->view('login_view');
$object->view('footer_view');
}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@imediasun, ссылки на литерутуру можно найти на форуме, в этом разделе есть прикрепленный тред.

А код роутера вы взяли плохой.
 

imediasun

Новичок
@imediasun, ссылки на литерутуру можно найти на форуме, в этом разделе есть прикрепленный тред.

А код роутера вы взяли плохой.
Спасибо за ссылку, укажите на реальные ошибки, если на этом варианте роутера разберусь переберу другие лучшие но у меня тут тривеальные ошибки неопытности работы без фреймворка
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@imediasun, я не буду исправлять этот говнокод. Хватит даже того, что встречается $GLOBALS
 

imediasun

Новичок
тогда напишите пожалуйста свой пример, а то поносить может каждый а помочь нет
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@imediasun, ну если ты так просишь, то ок.

Идешь на https://getcomposer.org/ и ставишь его к себе на машину, где пишешь код и тестируешь его.

Делаешь там у себя где-то папку, где будет лежать код сайта, например /var/www/test, хотя скорей всего у тебя винда.

Кладешь в composer.json код вида:

Код:
{
  "name": "c0dex/router",
  "description": "test page",
  "type": "example",
  "license": "MIT",
  "minimum-stability": "dev",
  "require": {
    "klein/klein": "dev-master"
  },
  "autoload": {
    "classmap": [
      "Controllers"
    ]
  }
}
Сам файл этот лежит в корневой папке проекта.

Далее под это расположение ты кладешь в /var/www/test/Controllers/Users/Register.php код вида:

PHP:
<?php namespace Controllers\Users;
class Register
{
     public function index()
     {
         echo 'Register controller';
     }
}
Далее в папку, из которой у тебя сервер читает индексный файл кладешь это:

PHP:
<?php
require_once __DIR__ . '/../vendor/autoload.php';
$klein = new \Klein\Klein();
$klein->respond('GET', '/users/register', function () {
$controller = new \Controllers\Users\Register();
   $controller->index();
});
$klein->dispatch();
Не забываешь делать
Код:
composer dump-autoload
По адресу http://твой-сайт/users/register будет вызван код из контроллера
 

imediasun

Новичок
Дело в том что у меня контроллер Users , a register это функция, и еще вопрос
PHP:
<?php
require_once __DIR__ . '/../vendor/autoload.php';
$klein = new \Klein\Klein();
$klein->respond('GET', '/users/register', function () {
$controller = new \Controllers\Users\Register();
 $controller->index();
});
$klein->dispatch();
этот файл как именуется? и что в индексе вообще ничего писать не надо?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Это индексный файл твоего сайта, а код тебе придется поправить по аналогии. То есть сделать контроллер Users, в него положить метод register, прописать нужный namespace и запустив composer dump-autoload, зайти на свой сайт и смотреть результат
 

imediasun

Новичок
Fatal error: Class 'Klein\Klein' not found in /var/www/clients/client1/web28/web/index.php on line 7

PHP:
require_once('Main.php');
$object= new Main();

require_once 'vendor/autoload.php';
$klein = new \Klein\Klein();
$klein->respond('GET', '/users/register', function () {
$controller = new \Controllers\Users();
 $controller->index();
});
$klein->dispatch();
function index(){
$object->view('preheader_view');
$object->view('login_view');
$object->view('footer_view');
}
function ddr(){
print('ddr');
}
[/B]
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Извини, но ты так и не удосужился прочитать ни про композер ни про роутинг
 

imediasun

Новичок
композер у меня стоит и работает, я им пользовался че про него читать, а про этот роутер Klein где инфу взять и тут у меня этот класс просто не найден, он же композером должен был быть поставлен? Я однозначно какие то бока делаю, но какие именно?
 

Фанат

oncle terrible
Команда форума
@c0dex, опять ты впрягся не в те сани )
Уже по внешнему виду этого пассажира видно, что халявщик.
обслуживать такого на его условиях - это гарантированная потеря времени
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@c0dex, опять ты впрягся не в те сани )
Уже по внешнему виду этого пассажира видно, что халявщик.
обслуживать такого на его условиях - это гарантированная потеря времени
Да я понимаю, но я же добрый после кофе =D
 
Сверху