如何使用fatfree php框架而无需重写引擎

时间:2015-09-04 08:32:23

标签: .htaccess fat-free-framework

我无法为我的项目使用htaccess,因此干净的URL不适用于路由。有没有办法使用查询参数?

示例

myf3project.net/user/show是不可能的。相反,我想做这样的事情:

  • myf3project.net?path=user/show
  • myf3project.net?view=user&action=show

4 个答案:

答案 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();