2013-11-20 5 views
1

Я только что начал работать над простым спокойным сервисом. Структура папок у меня есть, например, так:Phalconphp micro mvc routing issue

root 
- /api 
--/api/customers.php 

Так, например, в браузере я намерен позвонить http://domain/api/customers/fetchall

Однако, я только когда-нибудь обработчик NotFound называется. Код в customers.php является:

<?php 

use Phalcon\DI\FactoryDefault, 
    Phalcon\Mvc\Micro, 
    Phalcon\Config\Adapter\Ini; 

$di = new FactoryDefault(); 
$di->set('config', function() { 
    return new Ini("config.ini"); 
}); 

$app = new Micro($di); 

/** 
* Create new customer 
*/ 
$app->post('/create', function(){}); 

/** 
* Retrieve all customers 
*/ 
$app->get('/fetchall', function() use ($app) { 
    $data = array(); 
    $data[] = array(
     'id' => '123456', 
     'name' => 'customerName', 
    ); 

    echo json_encode($data); 
}); 

/** 
* Find customer by name 
*/ 
$app->get('/search/{name}', function($name){}); 

/** 
* Find customer by email 
*/ 
$app->get('/search/{email}', function($email){}); 

/** 
* Find customer by postcode 
*/ 
$app->get('/search/{postcode}', function($postcode){}); 

/** 
* Move a customer 
*/ 
$app->put('/move/{oldpostcode}/{newpostcode}', function($oldpostcode, $newpostcode){}); 

/** 
* Delete customer 
*/ 
$app->delete('/delete/{id:[0-9]+}', function($id) use ($app) { 
    $response = new Phalcon\Http\Response(); 
    $response->setJsonContent(array('status' => 'OK')); 
    return $response; 
}); 

$app->notFound(function() use ($app) { 
    $app->response->setStatusCode(404, "Not Found")->sendHeaders(); 
    echo 'This is crazy, but this page was not found!'; 
}); 

//echo $_SERVER['REQUEST_URI']; 
$app->handle(); 

Если я вместо этого использовать / вместо /fetchall затем в работах, но он также соответствует любому URL, а также которые не хорошо.

Оцените помощь заранее. Благодаря Адам

ответ

2

В случае, если вы все еще ищете ответ:

Если у вас нет .htacess пожалуйста, создайте и добавьте следующее: согласно tutorial

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ api/customers.php?_url=/$1 [QSA,L] 
</IfModule> 

Тогда в ваш код, вы должны отредактировать пути, которые должны быть согласованы с Say:

$app->get('/fetchall', function() use ($app) { 

к:

$app->get('/api/customers/fetchall', function() use ($app) { 

Это все, что нужно.

2

Посмотрите, как ошибка, но вы должны указать URL вы хотите, чтобы ваше приложение обрабатывает:

$app->handle(filter_input(INPUT_SERVER, 'REQUEST_URI')); 

Replace REQUEST_URI на то, что вам нужно.

+0

Используется для получения нужного URI в Micro v 2.0.8 – Emi

0

Вы, конечно, можете забыть добавить префикс/api/customers к вашему маршруту. Попытайтесь с этим:

$app->get('/api/customers/fetchall', function() use ($app) { 
$data = array(); 
$data[] = array(
    'id' => '123456', 
    'name' => 'customerName', 
); 

    echo json_encode($data); 
});