我無法爲我的項目使用htaccess,因此乾淨的URL不能用於路由。有沒有辦法使用查詢參數呢?如何在不重寫引擎的情況下使用fatfree php框架
例如
myf3project.net/user/show
是不可能的。相反,我想要做這樣的事情:
myf3project.net?path=user/show
或myf3project.net?view=user&action=show
我無法爲我的項目使用htaccess,因此乾淨的URL不能用於路由。有沒有辦法使用查詢參數呢?如何在不重寫引擎的情況下使用fatfree php框架
例如
myf3project.net/user/show
是不可能的。相反,我想要做這樣的事情:
myf3project.net?path=user/show
或myf3project.net?view=user&action=show
您也可以覆蓋$_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
這還是有點可能的,不幸的是你必須建立最你自己。
非常簡單的例子:
<?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。
嗨sascha,我將'$ f3-> get('view')'改爲'$ f3-> get('GET.view')'。現在它可以工作。謝謝! – user1639348
你是對的,忘了把它添加到我的代碼片段。 – sascha
您的意思是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);
基於@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);
Thx!這就是我一直在尋找的解決方案! – user1639348