2015-09-04 88 views

回答

3

您也可以覆蓋$_SERVER['REQUEST_URI']爲了這個目的:

$f3->route('GET /user', function ($f3) { echo "user"; }); 
$f3->route('GET /user/@action',function($f3,$params){ 
    echo "user->".$params['action']; 
}); 

if ($f3->exists('GET.path',$path)) 
    $f3->URI = $f3->BASE.'/'.$path; 

$f3->run(); 

,然後就開 http://myf3project.net?path=user/show

+0

Thx!這就是我一直在尋找的解決方案! – user1639348

0

這還是有點可能的,不幸的是你必須建立最你自己。

非常簡單的例子:

<?php 

$f3 = require 'lib/base.php'; 

$f3->route('GET /', function() use($f3) { 
    switch($f3->get('view')) { 
     case 'user': 
      // do something 
      break; 
     case 'admin': 
      // do something 
      break; 
    } 
}); 

的 「/」 的路線應該工作,即使沒有的.htaccess。

+0

嗨sascha,我將'$ f3-> get('view')'改爲'$ f3-> get('GET.view')'。現在它可以工作。謝謝! – user1639348

+0

你是對的,忘了把它添加到我的代碼片段。 – sascha

1

您的意思是mod_rewrite不可用?這確實是一個問題。但您可以致電$f3->mock進行救援。

這裏有一個簡單的例子:

$f3 = require('lib/base.php'); 

// Homepage 
$f3->route('GET /',function($f3){ 
    echo 'This is home. '. 
     'Click <a href="?path=/contact">here</a> to see the contact form.'; 
}); 

// Contact form 
$f3->route('GET|POST /contact',function($f3){ 
    echo 'This is the contact form. '. 
     'Click <a href="?path=/">here</a> to go back home.'. 
     '<form method="post" action="">'. 
     '<textarea name="message"></textarea>'. 
     '<button>Send message</button></form>'; 
    if ($f3->VERB=='POST') 
     echo 'Submitted message:<br>'. 
      nl2br($f3->get('POST.message')); 
}); 

// Workaround here: $f3->mock is used instead of $f3->run 
$path=$f3->get('GET.path'); 
if (@$path[0]!=='/') 
    $path='/'; 
$f3->mock($f3->VERB.' '.$path,$_POST); 
0

基於@xfra35's answer,我提出了一個解決方案,可以讓你有這樣的路徑:

/index.php/foo/bar

相反的:

/index.php?path=/foo/bar

但你仍然可以使用查詢變量(如/index.php/foo/bar?test=123),並讓他們使用$_GET['test']$f3->get('GET.test')

只需更換您的$f3->run();有:

$path=$_SERVER['PATH_INFO']; 
if (@$path[0]!=='/') 
    $path='/'; 
$f3->mock($f3->VERB.' '.$path.'?'.$_SERVER['QUERY_STRING'],$_POST); 
相關問題