2011-07-27 56 views
0

我試圖進入MVC,但遇到一個問題,在任何地方都沒有解釋,它是如何從一個控制器重定向到另一個控制器。在PHP中使用MVC重定向和鏈接的問題

我用下面的.htaccess文件:

RewriteEngine On 

RewriteCond% {REQUEST_FILENAME}!-F 
RewriteCond% {REQUEST_FILENAME}!-D 

RewriteRule ^(.*)$ index.php? Url = $ 1 [L, QSA] 

直接使用控制器它把它的方法和id日以後。

所有這些工作都以標準方式訪問它們,但是當選擇一個視圖來將更多頁面直接用作控制器時。

<a href="next_page_controler"> NEXT_PAGE </ a> 

並進入下一個控制器,但是當我想訪問方法必須使用

<a href="next_page_controler/**controler_model**"> NEXT-pAGE_MODEL </ a> 

和我們這裏有兩個問題:

  1. IN多次在地址欄鏈接再次顯示爲

    www.site_pat/next_page_controler/next_page_controler/next_page_controler/next_page_controler/next_page_controler/controler_model

  2. 當您嘗試使用標題(Location: controler_name)作爲方法controler_model重定向時;沒有東西會得到任何消息或任何東西只是想嘗試但重定向不起作用。

如何解決這些問題我想你們遇到過很多這些都是基本的東西,我認爲大家一起開始大聲疾呼,應該瞭解這些基礎知識。

回答

1

有件事錯了你的htaccess的,應該是這樣......

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME}!-F 
RewriteCond %{REQUEST_FILENAME}!-D 

RewriteRule ^(.*)$ index.php/$1 [L, QSA] 
+1

@prodigitalson coud你給我一個例子 –

+0

我做了一個引導文件從的index.php?網址獲得url = 和它的工作,但我GES問題並不在.htpaccess我NEAD的鏈接和重定向的例子。 –

1

UPDATE

@prodigitalson coud你給我一個例子

所以一個超級簡單的例子可能看起來像下面的代碼。我從來沒有真正從sractch編寫路由器,因爲我通常使用框架,所以有可能soem需要的功能,這不包括...路由是一個相當複雜的事情,取決於你想要如何resuable。我會推薦看看幾個不同的php框架是如何爲好的例子做的。

// define routes as a regular expression to match 
$routes = array(
    'default' => array(
    'url' => '#^/categories/(?P<category_slug>\w*(/.*)?$#', 
    'controller' => 'CategoryController' 
    ) 
) 
); 

// request - you should probably encapsulate this in a model 
$request = array(); 

// loop through routes and see if we have a match 
foreach($routes as $route){ 
    // on the first match we assign variables to the request and then 
    // stop processing the routes 
    if(preg_match($route['url'], $_SERVER['REQUEST_URI'], $params)){ 
    $request['controller'] = $route['controller']; 
    $request['params'] = $params; 
    $request['uri'] = $_SERVER['REQUEST_URI']; 
    break; 
    } 
} 

// check that we found a match 
if(!empty($request)){ 
    // dispatch the request to the proper controller 
    $controllerClass = $request['controller']; 
    $controller = new $controllerClass(); 

    // because we used named subpatterns int he regex above we can access parameters 
    // inside the CategoryController::execute() with $request['params']['category_slug'] 
    $response = $controller->execute($request); 
} else { 
    // send 404 
} 

// in this example $controller->execute() returns the compiled HTML to render, but 
// but in most systems ive used it returns a View object, or the name of the template to 
// to be rendered - whatever happens here this is where you send your response 

print $response; 
exit(0); 

你不應該來實現從的.htaccess控制器路由負全部。除了靜態資產,您應該簡單地將所有請求轉到index.php。然後在PHP端,根據url的模式來決定發送請求的位置。