在symfony中找不到404

时间:2017-09-19 14:17:03

标签: php symfony

我需要一个测试功能,但它不起作用。据说路由+控制器应该工作,但我找不到404。

这是我的/app/config/routing.yml

AndroidAPIBundle:
    resource: "@MDPIAndroidApiBundle/Controller/"
    type:     annotation
    prefix:   /

Controller目录中我有LoginController.php

/**
 * @Route("/api/test", name="test")
 */
public function getAction(Request $request)
{
    $format = "json";
    $view = View::create()->setStatusCode(201)->setData(array("status"=>"OK", "data"=>array("test" => "DAN TEST")))->setFormat($format);
    return $this->get('fos_rest.view_handler')->handle($view);
}

那么为什么当我发出卷曲请求时,我收到了404消息?同样在浏览器中将/api/test添加到我的本地网址。

修改

php app/console router:debug

test                                         ANY    ANY    ANY  /api/test

编辑2

/etc/nginx/sites-available/susy_android_final

server {
    listen                  80;
    server_name             susy.android.final.local;
    access_log              /var/log/nginx/susy_android_final.access.log;
    error_log               /var/log/nginx/susy_android_final.error.log;
    root                    /var/www/susy.mdpi.com.final/web;

    client_max_body_size 500M;
    large_client_header_buffers 8 64k; 

    location / {
            index app_dev.php;
            if (-f $request_filename) {
            break;
            }
            rewrite ^(.*)$ /app_dev.php last;
    }
    ## Parse all .php file in the /var/www directory
   location ~ (app|app_dev|app_eudev).php {
            fastcgi_split_path_info         ^(.+\.php)(.*)$;                
            fastcgi_pass                    unix:/var/run/php/php5.6-fpm.sock; 
            #fastcgi_pass                   127.0.0.1:9001; 
            #fastcgi_index                  index.php;
            fastcgi_param                   SCRIPT_FILENAME  $request_filename;
            include                         fastcgi_params;

   }


}

/etc/hosts

127.0.0.1 susy.android.final.local

这是在ubuntu

4 个答案:

答案 0 :(得分:3)

确保您的域对Windows

可见

调试此问题应该采取的第一步是确保Windows了解www.yourdomain.com是什么以及它位于何处。为此,您需要修改Windows的hosts文件,该文件应位于C:\Windows\System32\drivers\etc\文件夹中。我个人喜欢在桌面上为该文件创建一个快捷方式,以便在需要时更容易找到。在Notepad ++(或任何你喜欢的文本编辑器)中打开文件,转到文件末尾,并添加以下行:

# replace with your VM's IP address
255.255.255.0 www.yourdomain.com

如果您愿意,可以继续添加域名,只需确保在VM上定义了相应的域名。另外,请确保您的VM具有静态IP地址,this指南相当完整。

注意,只有在使用自定义域时才需要执行此步骤。如果您使用http://localhost:8080/,那么它应该不是问题

在Nginx配置中注册站点

如果您使用Symfony的内置命令创建项目,则不应执行此步骤。但是,检查没有坏处。确保域名对应于前面描述的hosts文件中的域名,并且正确定义了域名,如下所示:

server {
    server_name yourdomain.tld www.yourdomain.tld;
    root /var/www/yourproject/web; # this is where app.php is located

您可以在最低Nginx设置here上找到更多信息。

检查防火墙设置

所以你已经完成了上面的所有步骤,它仍然不起作用,现在是什么?也许Windows只是阻止了对VM的请求,在这种情况下,您需要进入Windows防火墙并允许Virtual Host-Only设置。

我不认为这是您的问题所在,因为您明显从nginx收到错误消息,这意味着请求确实到达了您的服务器。但是我认为对其他人了解可能很有趣。

答案 1 :(得分:2)

您是否尝试过运行以下命令?

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

答案 2 :(得分:2)

您的.htaccess目录中的web看起来有重写/重定向规则,因为您将.htaccess规则移动到虚拟主机配置文件中删除.htaccess文件的内容并重试< / p>

答案 3 :(得分:0)

我认为您已正确配置了symfony,但浏览器和symfony之间的某些内容已被破坏。 我建议为你的配置写一个功能测试

https://symfony.com/doc/2.8/testing.html

namespace AppBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class LoginControllerTest extends WebTestCase
{
    public function testGetAction()
    {
        $client = static::createClient();
        $client->request('GET', '/api/test');
        $this->assertTrue($client->getResponse()->isSuccessful());
    }
}

如果你的测试工作正常,你的配置就可以了。那么你应该看看你是否登陆了正确的网络服务器并为symfony配置了网络服务器(通常根目录应该在网络文件夹中)