Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с RewriteRule
 
 автор: inner   (10.09.2009 в 14:51)   письмо автору
 
 

Привет) Помогите записать RewriteRule, что бы были такие url www.site.ru/test/tester/y/1/u/7
где, test - имя вызываемого класса,
tester - имя метода класса,
все, что после tester/ - переменные - GET - y=1, u=7 и т.д.

  Ответить  
 
 автор: heed   (10.09.2009 в 16:25)   письмо автору
 
   для: inner   (10.09.2009 в 14:51)
 

а если потом получится
$c = new BigCMSS();
$c->DeleteAllFiles(0);
, а делалосб всё для совсем других методов
?

  Ответить  
 
 автор: inner   (11.09.2009 в 13:46)   письмо автору
 
   для: heed   (10.09.2009 в 16:25)
 

проверки делать буду

  Ответить  
 
 автор: heed   (11.09.2009 в 15:56)   письмо автору
 
   для: inner   (11.09.2009 в 13:46)
 

код будет наверное наполовину (если не больше) состоять из таких проверок
, вообще не понял зачем может понадобиться напрямую передавать в запросе имена и методы классов
, тем-более с заранее неизвестными именами и значениями параметров

получается что в htaccess должна быть такая строка,
RewriteRule ^([a-z]{2,8})/([a-z]{2,8})/([a-z])/([0-9]+)/([a-z])/([0-9]+)/?$ test_MR.php?cname=$1&method=$2&$3=$4&$5=$6

а в этом test_MR.php, примерно такое солличество проверок, только с одним классом
<pre><?php
print_r
($_GET);
?>

-----------
<?
if (!isset($_GET['cname'], $_GET['method'],
        
$_GET['y'], $_GET['u'])
    || (
$cnanme $_GET['cname']) != 'test'
    
|| ($method $_GET['method']) != 'tester'
    
|| $_GET['y'] < || $_GET['y'] > 1000
    
|| $_GET['u'] < || $_GET['u'] > 1000
    
)
        exit(
"unacceptable params\n\n");
class 
test {
    private 
$y;
    private 
$u;
 function 
__construct($x$z) {
    
$this->$x;
    
$this->$z;
 }
 function 
tester() {
    echo 
"<h1>\n" $this->"</h1>\n";
    echo 
"<h2>\n" $this->"</h2>\n";
 }
}

$obj = new $cnanme($_GET['y'], $_GET['u']);
$obj->$method();
?>


должна быть какая-то логика что должен делать скрипт, и чего не должен
, если классов всего 3 , то в два бита умещается информация, выбрали-ли какой-то из них , или не выбрали никакой
, поэтому никогда-бы не стал передавать имя классов, методов, функций, если только это не было-бы поиском их описания , где-нибудь в мануале

// UPD
столько много проверок ещё и потому что будет возможность обратиться к файлу напрямую

  Ответить  
 
 автор: ride   (11.09.2009 в 14:55)   письмо автору
 
   для: inner   (10.09.2009 в 14:51)
 

test и tester - это тоже будут значения переменных
>>все, что после tester/ - переменные - GET - y=1, u=7 и т.д.
то есть, таких переменных будет сколько угодно?

  Ответить  
 
 автор: inner   (14.09.2009 в 10:56)   письмо автору
 
   для: ride   (11.09.2009 в 14:55)
 

да, я решил эту проблему так...
$url = trim($_SERVER['REQUEST_URI'], '/');
        $exp = explode('/', $url);
        
        $controller = $exp[0];
        unset($exp[0]);
        if(!empty($exp[1])){
        $action = $exp[1];
        unset($exp[1]);
        }
        for($i=0, $cnt=count($exp); $i<$cnt; $i++)
        {
            if($i%2)
            {
                $params[$exp[$i+1]] = $exp[$i+2];
            }
        }


Примерно как-то так

  Ответить  
 
 автор: @ndry   (16.09.2009 в 22:36)   письмо автору
 
   для: inner   (10.09.2009 в 14:51)
 

Стоит получать не имя класса, а имя модуля и действие, которое нужно выполнить...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования