Updated handling of subdirectories and redirects.

pull/55/merge
Mike Cao 12 years ago
parent 1acb68756c
commit d41795cbdc

@ -386,9 +386,16 @@ class Engine {
* @param int $code HTTP status code
*/
public function _redirect($url, $code = 303) {
if ($this->get('flight.base_url') !== null) {
$base = $this->get('flight.base_url');
}
else {
$base = $this->request()->base;
if ($base != '/' && strpos($url, '://') === false) {
$url = $base.(($url[0] == '/') ? '' : '/').$url;
}
// Append base to relative urls
if ($base != '/' && $url[0] != '/' && strpos($url, '://') === false) {
$url = $base.'/'.$url;
}
$this->response(false)

@ -43,7 +43,7 @@ class Request {
if (empty($config)) {
$config = array(
'url' => getenv('REQUEST_URI') ?: '/',
'base' => str_replace('\\', '/', dirname(getenv('SCRIPT_NAME'))),
'base' => str_replace(array('\\',' '), array('/','%20'), dirname(getenv('SCRIPT_NAME'))),
'method' => getenv('REQUEST_METHOD') ?: 'GET',
'referrer' => getenv('HTTP_REFERER') ?: '',
'ip' => getenv('REMOTE_ADDR') ?: '',

@ -1,6 +1,6 @@
## Flight Tests
This directory contains unit tests for Flight. The tests were written for PHPUnit 3.7.
This directory contains unit tests for Flight. The tests were written for PHPUnit 3.7.10
To run the tests do:

@ -0,0 +1,77 @@
<?php
/**
* Flight: An extensible micro-framework.
*
* @copyright Copyright (c) 2013, Mike Cao <mike@mikecao.com>
* @license MIT, http://flightphp.com/license
*/
require_once 'PHPUnit/Autoload.php';
require_once __DIR__.'/../flight/Flight.php';
class RedirectTest extends PHPUnit_Framework_TestCase
{
/**
* @var \flight\Engine
*/
private $app;
function getBaseUrl($base, $url){
if ($base != '/' && $url[0] != '/' && strpos($url, '://') === false) {
return $base.'/'.$url;
}
return $url;
}
function setUp() {
putenv('SCRIPT_NAME=/subdir/index.php');
$this->app = new \flight\Engine();
$this->app->set('flight.base_url', '/testdir');
}
// The base should be the subdirectory
function testBase(){
$base = $this->app->request()->base;
$this->assertEquals('/subdir', $base);
}
// Absolute URLs should ignore the base
function testAbsoluteUrl(){
$url = '/login';
$base = $this->app->request()->base;
$this->assertEquals('/login', $this->getBaseUrl($base, $url));
}
// Relative URLs shuold include the base
function testRelativeUrl(){
$url = 'login';
$base = $this->app->request()->base;
$this->assertEquals('/subdir/login', $this->getBaseUrl($base, $url));
}
// External URLs should ignore the base
function testHttpUrl(){
$url = 'http://www.yahoo.com';
$base = $this->app->request()->base;
$this->assertEquals('http://www.yahoo.com', $this->getBaseUrl($base, $url));
}
// Configuration should override derived value
function testBaseOverride(){
$url = 'login';
if ($this->app->get('flight.base_url') !== null) {
$base = $this->app->get('flight.base_url');
}
else {
$base = $this->app->request()->base;
}
$this->assertEquals('/testdir/login', $this->getBaseUrl($base, $url));
}
}

@ -17,6 +17,7 @@ class RequestTest extends PHPUnit_Framework_TestCase
function setUp() {
putenv('REQUEST_URI=/');
putenv('SCRIPT_NAME=/index.php');
putenv('REQUEST_METHOD=GET');
putenv('HTTP_X_REQUESTED_WITH=XMLHttpRequest');
putenv('REQUEST_URI=/');
@ -29,7 +30,7 @@ class RequestTest extends PHPUnit_Framework_TestCase
function testDefaults() {
$this->assertEquals('/', $this->request->url);
$this->assertEquals('', $this->request->base);
$this->assertEquals('/', $this->request->base);
$this->assertEquals('GET', $this->request->method);
$this->assertEquals('', $this->request->referrer);
$this->assertEquals(true, $this->request->ajax);

Loading…
Cancel
Save