如何在没有重写引擎的情况下使用 fat free php 框架

howto use fatfree php framework without rewrite engine

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

例子

myf3project.net/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,“/”路由也应该有效。

您的意思是 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);

您也可以为此覆盖 $_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

基于,我提出了一个解决方案,可以让您拥有这样的路径:

/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);