繁体   English   中英

Symfony2-从供应商路由php应用

[英]Symfony2 - routing php app from vendor

我想从供应商处路由php脚本。 我使用Composer来安装数据库管理( https://github.com/vrana/adminer/ )。 该应用程序的来源是:vendor / vrana / adminer / adminer / index.php

我想创建路由器以使用此应用程序,例如,当我调用url myweb.com/adminer时,它应该加载该源:vendor / vrana / adminer / adminer / index.php

是否可以通过routing.yml做到这一点? 像这样:

adminer:
    resource: "Vendor/vrana/adminer/adminer/index.php"
    prefix:   /adminer

还是怎么可能呢?

真的很简单。

创建常规路由,然后包含adminer.php并从控制器返回它。 不要忘了将此路由放在防火墙下

在控制器中:

use Symfony\Component\HttpFoundation\Response;
public function mysqlClientAction() {
    return new Response(include_once $this->container->getParameter('kernel.root_dir') . '/Resources/views/adminer.php');
}

在routing.yml中

admin_mysql_manager:
    path: /mysqlclient
    defaults: { _controller: YourBundle\Controller\YourController::mysqlClientAction}

通过symfonys routing.yml是不可能的,因为这需要启动app.php的应用内核。 但是您可以将管理员设置为另一台服务器。

例如,如果您使用apache ,请写在/etc/apache2/sites-enabled/local

<VirtualHost *:80>
    ServerName local.adminer
    DocumentRoot /YourPathToAdminer
    DirectoryIndex adminer.php
    <Directory /YourPathToAdminer>
        AllowOverride all
        Allow from all
    </Directory>
    LogLevel debug
</VirtualHost>

并在您的/etc/hosts添加某处

127.0.0.1       local.adminer

只需在浏览器中调用http://local.adminer即可。

我通过模板解决了类似的问题,但是我使用的是捷克版本,只有一个文件:

//app/Resources/views/adminer.html.php

<?php
    include(__DIR__.'/../../../vendor/vrana/adminer/adminer/index.php');
 ?>

和路线从控制器

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;    

/**
 * @Route("/adminer", name="adminer")
 * @Template(engine="php")
 */
public function adminerAction()
{
    return $this->render('::adminers.html.php');
}

并将adminer.php并重命名为/vendor/vrana/adminer/adminer/index.php现在地址是yoursite / adminer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM