我无法为我的项目使用htaccess,因此干净的URL不适用于路由。有没有办法使用查询参数?
示例
myf3project.net/user/show
是不可能的。相反,我想做这样的事情:
myf3project.net?path=user/show
或myf3project.net?view=user&action=show
答案 0 :(得分: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
答案 1 :(得分: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);
答案 2 :(得分: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,“/”路线也应该有用。
答案 3 :(得分:0)
基于@xfra35's answer,我提出了一个解决方案,允许您拥有这样的路径:
http://localhost/.well-known/openid-configuration
而不是:
/index.php/foo/bar
但您仍然可以使用查询变量(例如/index.php?path=/foo/bar
)并使用/index.php/foo/bar?test=123
或$_GET['test']
来获取它们:
只需将您的$f3->get('GET.test')
替换为:
$f3->run();