我是symfony的新手,并开始按照网站上的说明学习。我创建了幸运数字控制器,但它没有像我希望的那样工作。
以下是我添加的LuckyController.php
文件的代码。我在网址localhost/testing/web/lucky/number
上收到 404错误页。
<?php
// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class LuckyController
{
/**
* @Route("/lucky/number")
*/
public function numberAction()
{
$number = rand(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
我不确定我是否错过了一个步骤,或者我是否只是想创建控制器。我正在使用 Symfony 3.1标准版。非常感谢任何帮助。
答案 0 :(得分:2)
嗯,您在请求中使用了生产环境。确保您的缓存清晰或使用开发环境:
localhost/testing/web/app_dev.php/lucky/number
答案 1 :(得分:1)
默认情况下,Symfony会将localhost / testing / web / lucky / number中的URL重写为localhost / testing / web / app.php / lucky / number来执行控制器。重写在web文件夹中的.htaccess中配置。 如果Apache忽略了.htaccess,则会导致上述问题。
如何检查Apache是否忽略.htaccess?
在.htaccess上添加测试行并转到URL。如果Apache使用.htaccess,则会导致错误,因为.htaccess语法错误。如果没有错误(仍然获得404),则Apache不使用.htaccess。
<强>解决方案强>
通常,Apache会忽略.htaccess文件,因为以下Apache配置AllowOverride none。检查虚拟主机配置并添加/修改AllowOverride All。
实施例
<Directory /var/www/site/example.com/web>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
PS:我找到了检查并修复.htaccess https://docs.bolt.cm/3.4/howto/making-sure-htaccess-works
的方法答案 2 :(得分:0)
@Joshua Blevins很高兴看到你来到symfony并尝试它的第一个初学者代码。
您必须在此处更改位于项目的 web 文件夹中的app.php
。打开并将false选项设置为true,它将使您的项目能够在生产环境中运行。
此外,symfony的每个控制器都从基本控制器扩展。
试试这个:
// src/AppBundle/Controller/LuckyController.php
// ...
// --> add this new use statement
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class LuckyController extends Controller
{
// ...
}
您还可以通过控制器中的echo "hello world!
来测试您的溃败。