0

私は単一のエントリポイントであるindex.php?uriを介してサイト全体を読み込もうとしていますが、
私の目標はきれいなURLを作成することですが、これまでのところ...

domain.com/section-name/page-of-that-section

したがって、最初の部分はセクションのクラス/ファイル(メール、ユーザー、アカウントなど) をロードします

2番目の部分は、そのセクションのページのクラス/ページをロードします

これは非常に簡単で、これまでのところ簡単です。私にとってトリッキーな部分は、一部のページにID番号(ユーザーID、メッセージID、ブログID、フォーラムID、フォーラム投稿ID、フォーラムトピックIDなど)があり、これを使用してそのレコードを検索することです。 ID番号によるデータベース。

次に、一部のページには、ページングに使用されるページ番号もあります。

そのため、ページ番号が表示される場合と表示されない場合があります。これは、セクションに応じたID番号と同じです。

私は例、アドバイス、ページ番号とID番号の部分を機能させるためのヘルプを探しています。それらを取得して、変数$page_number$id_numberに割り当てることができる必要があります。

以下は、これまでに使用したコードと、アクセスする必要のあるURLの例です。これには既存のフレームワークを使用したくありません。これを機能させることに近づいていると思われる場合は、助けてください。

現在、ID番号の前にid /を追加し、ページング番号の前にpage /を追加しました。これは、可能な限り何にでも変更できます(つまり、id-423423ページ-23ページ/23ページ23p / 23)。 PHPの変数に格納する数値を取得します

<?php
//get uri
$uri = isset( $_GET['uri'] ) ? $_GET['uri'] : null;

//put uri into array, everything in between '/' will be an array value
$uri1 = explode('/', $uri);

//the first array value will be the SECTION name/class
$section_name = $uri['0'];

//the second array value will always be the PAGE name/class
$page_name = $uri['1'];

//Now some pages will have numbers in the uri
// some are id numbers for things such as a message ID, users ID, comment ID, photo ID, blog ID
// then to complicate it even more sometimes, pages will need paging so will also have a page number in the uri
// I am looking for a way to detect if there is a ID number or page number in uri's for example like listed below.
// right now I have added id/ in front of id numbers and page/ in front of a paging number, this could be changed to anything **(ie; id-423423 page-23 page/23  page23 p/23)** 

mail/inbox/
mail/inbox/page/12
mail/message/id/3432435

users/online/
users/online/page/234
users/profile/id/42234
users/comments/id/42234
users/comments/id/42234/page/3

blogs/list/id/42234
blogs/list/id/42234/page/25
blogs/viewpost/id/1323/             
blogs/create/
blogs/edit/id/34453353

?>
4

1 に答える 1

2

最も簡単な方法は、正規表現を使用してルーティングシステムを作成することです。これは、非常に簡単な作業です。いくつかのオープンソースのものを使用することもできます:http:
//robap.github.com/php-router/

そして、これが私の例です(ウォッカのボトルのように単純ですが、機能しています):

// for urls like http://mysite.com/1 or http://mysite.com/29 (any digit)
$ROUTE['(\d*)'] = 'pages/showPage/$1' ;
// for url http://mysite.com/admin/new-page
$ROUTE['admin\/new-page'] = 'pages/addPage' ;

function get_route($uri) {
    global $ROUTE ;
    $routes = $ROUTE ;

    foreach ($routes as $rUri => $rRoute) {
        if (preg_match("#^{$rUri}$#Ui", $uri)) {
            $route = preg_replace("#^{$rUri}$#Ui", $rRoute, $uri) ;
            break ;
        }
    }

    $route = explode('/', $route) ;
    $return['controller'] = array_shift($route) ;
    $return['action'] = array_shift($route) ;
    $return['params'] = empty($route) ? array() : $route ;

    return $return ;
}

//testing for http://mysite.com/2
$route = get_route( $_GET[ 'uri' ] ) ;
var_dump( $route ) ;
于 2011-01-19T01:57:51.523 に答える