我需要一个测试功能,但它不起作用。据说路由+控制器应该工作,但我找不到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
答案 0 :(得分:3)
调试此问题应该采取的第一步是确保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/
,那么它应该不是问题
如果您使用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配置了网络服务器(通常根目录应该在网络文件夹中)