如何在Drupal中使用Slim micro框架?

时间:2018-05-24 08:02:42

标签: php apache routes drupal-7 slim

早上好, 我有一个关于在Drupal中使用Slim的问题:我在我的apache服务器中有一个用Drupal创建的现有网站项目。我的工作是在现有网站上添加另一部分,我决定在没有Drupal但使用Slim微框架(v2)的情况下工作。完成我的网站后,我在Drupal项目文件夹的根目录中创建了一个文件夹,我将我的网站放在这个文件夹中。

This is how the Drupal folder looks with the new folder。 (文件夹可能是脚本,misc,...和文件可能是.htaccess,index.php,...)

之后我尝试使用以下URL访问我的网站:http://www.thewebsite.com/MYNEWFOLDER/并将其重定向到我在route.php文件中添加的路径“/”:一切正常。

$app->get('/', function () use ($app){
MYCODE});

然后我尝试http://www.thewebsite.com/MYNEWFOLDER/admin,因为我还在route.php文件中添加了一个路径“/ admin”,但是不是访问网站的这一部分,而是将我重定向到drupal错误404页面上写着:'“MYNEWFOLDER / admin”未找到。'。

$app->get('/admin(/)', function (){
MYCODE});

我的问题是:如何告诉Drupal这个文件夹必须忽略MYNEWFOLDER以及如何在不被Drupal重定向的情况下访问http://www.thewebsite.com/MYNEWFOLDER/admin

度过美好的一天!

(抱歉我的英文顺便说一下^^)

1 个答案:

答案 0 :(得分:0)

Drupal 7和Slim 3:

使用Form API使用load参数创建路由: 您将需要将Drupal的http请求对象路由到Slim

require 'vendor/autoload.php';

function my_modulename_menu() {
   $items['my/page/%my_modulename_somefunction'] = array(
    'page arguments' => array(2),
    'access arguments' => array('access content'),

return $items;

}

function my_modulename_somefunction_load($var) {

   $app = new \Slim\App;
   $request = request_path(); // set the Drupal request object here

   if ($_SERVER['REQUEST_URI'] == "my/page/" . $var) {

      $app->get('/my/page/{passed}', function ($request, $response, array $args) {

      $stuff = $args['passed']

      // do something with your data here

      return $response->withJson($stuff);

    });

    $app->run();
    exit;
  }

}

这将输出/ my / page /之后传递给用户的所有信息,而与Drupals主题层无关,并且仅限于Drupal中的特定路径,而不会破坏您的Web服务器。

https://github.com/slimphp

我是本单元的作者:

https://www.drupal.org/project/simple_slim_api

有关D7 Form API的其他文档,请参见:

https://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/7.x

https://www.drupal.org/node/224170