如何使用apache2在localhost中部署symfony2应用程序

时间:2015-04-07 06:12:57

标签: php apache symfony

我在SO中经历了很多与此相关的问题,但无法找到解决问题的方法。

我已将demo symfony应用程序复制到/var/www/html/myproject文件夹。我只能访问localhost/myproject/web/app_dev.php但不能访问localhost/myproject/web/app.php。基本上我想从开发环境切换到生产环境。

当我访问app.php时,我只得到一个空白页面。我该如何解决这个问题?

以下是我的routing.yml文件

app:
    resource: "@AppBundle/Controller/"
    type:     annotation

修改

错误日志(app / logs / prod.log)

[2015-04-06 22:54:53] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /"" at /home/fazlan/ppp/myproject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 144 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /\" at /home/fazlan/ppp/myproject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:144, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0):  at /home/fazlan/ppp/myproject/app/cache/prod/appProdUrlMatcher.php:35)"} []

2 个答案:

答案 0 :(得分:1)

您需要创建捆绑包并为其配置路由。在这个prod环境将是有效的。极致有可能在产品中起作用。

@Cedric:Acme Demo Bundle仅在app_dev.php上配置,您必须先使用正确的路由创建另一个捆绑包,您可以在app / config / routing.yml或您设置的任何内容中查看捆绑包的路由列表你的配置的扩展。

更多信息here

答案 1 :(得分:0)

在完成不同的教程和手册后,我终于通过以下更改解决了这个问题。

的routing.yml

app:
    resource: "@AppBundle/Controller/"
    type:     annotation


_acme_demo:
    resource: "@AcmeDemoBundle/Resources/config/routing.yml"

AppKernel.php(此处未显示整个文件)

public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new AppBundle\AppBundle(),
             new Acme\DemoBundle\AcmeDemoBundle(),

        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            //$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

在上面的文件中注册了AcmeDemoBundle。您必须注释//$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();以防止捆绑包在开发和测试环境中注册两次。

编辑完这两个文件后,转到项目文件夹并执行

php app/console --env=prod cache:clear

然后在浏览器localhost/myproject/web/app.php中加载与app_dev.php中相同的包