【问题标题】:Phalconphp micro mvc routing issuePhalconphp micro mvc 路由问题
【发布时间】:2013-11-20 21:41:28
【问题描述】:

我刚刚开始研究一个简单的 restful 服务。 我的文件夹结构是这样的:

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,这是不好的。

提前感谢您的帮助。 谢谢 亚当

【问题讨论】:

    标签: phalcon


    【解决方案1】:

    看起来像一个错误,但您需要指定您希望应用程序处理的 URL:

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

    将 REQUEST_URI 替换为您需要的内容。

    【讨论】:

      【解决方案2】:

      如果您仍在寻找答案:

      如果您没有 .htacess,请创建一个并添加以下内容:根据 tutorial

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

      然后在您的代码中,您必须编辑要匹配的路径:

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

      到:

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

      仅此而已。

      【讨论】:

        【解决方案3】:

        你们可能忘记在路由中添加 /api/customers 前缀。试试这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-31
          • 1970-01-01
          相关资源
          最近更新 更多