我正在尝试学习Symfony框架并努力解决它。说明不是很有用,或者假设我知道的比我知道的要多得多。我只是想创建一个具有适当路由和控制器的单个网页。我一直在谷歌搜索找到答案并取得了一些进展,但还没有运气。现在我只是使用默认捆绑包等标准安装Symfony。我创建了一个名为" gtest3"并为它选择了PHP ......
我不确定将新路径放在哪个文件中(或哪个文件),或者可能需要将其放在多个文件中?
我找到了" routing.yml"文件,这似乎是我需要把它... ...
现在就在那里:
gtest3:
resource: "@gtest3Bundle/Resources/config/routing.php"
prefix: /
app:
resource: "@AppBundle/Controller/"
type: annotation
我猜我需要添加一些内容并放置控制器的位置/文件名?我尝试过这几种方法并且只是出错。
还有" routing.php"上面代码中引用的文件。我不确定这是否是"控制器"或者如果它是"路线"的另一部分。以下是该文件的代码:
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('gtest3_homepage', new Route('/hello/{name}', array(
'_controller' => 'gtest3Bundle:Default:index',
)));
return $collection;
我不知道我会在这里添加什么。 最后 - 有" DefaultConroller.php"我发现的文件也可能是控制器。我不认为我需要在这里包含该文件的代码。
所以 - 我要做的就是创造一条可能" / gman"然后让控制器只是在页面上回显一些东西。超级基本的东西。我无法弄清楚如何实现这一目标。
任何人都可以帮忙吗?非常感谢...
答案 0 :(得分:1)
要配置路由,您可以使用yml,php或xml文件。您可以在app / config / config.yml
中指定它framework:
router:
resource: "%kernel.root_dir%/config/routing.yml"
您可以在此处查看现在使用的文件。
答案 1 :(得分:1)
有一些方法可以存储这些路线。
app:
resource: "@AppBundle/Controller/"
type: annotation
这是通过在控制器类中写入操作之上的注释(例如indexAction)来使用路由的方法。 Read more
另一种常见方法是在每个Bundle中构建一个或多个.yml文件。 在app / config / routing.yml中你应该写这个:
app:
resource: "@AppBundle/Resources/config/routing.yml"
prefix: /
然后你需要创建文件(和必要的目录)src / AppBundle / Resources / config / routing.yml并添加以下内容:
app_homepage:
path: /
defaults: { _controller: AppBundle:Default:index }
然后它将尝试找到DefaultController并在AppBundle(src / AppBundle / Controller / DefaultController.php)中触发indexAction。
要调试路线,只需在项目目录中输入控制台:
app/console router:debug
答案 2 :(得分:1)
您可以通过三种方式定义路由,方法是使用yml文件,xml文件或使用php文件。这是documented behaviour。
您来自routing.yml
尝试设置php版本的外观。我不推荐它,而是使用配置而不是编码路由。
注释示例如下所示:
添加控制器:
namespace Gtest3Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class Gtest3Bundle extends Controller
{
/**
* @Route("/hello/{name}")
* @Template()
*/
public function indexAction($name)
{
return array('name' => $name);
}
}
并添加app/config/routing.yml
:
gtest3:
resource: "@Gtest3Rights/Controller/"
type: annotation
prefix: /what-ever-you-want
您可以使用以下方法检查您定义的路线类型:
./app/console router:debug
如果没有听到,则表示配置错误。
请注意,您的包名称违反了在symfony2上下文中如何命名包的约定。
建议使用NamespaceProjectBundle
。这也记录在案。如果您被卡住try generating a bundle,请./app/console generate:bundle
。这样你就可以创建一个完整的symfony2结构,它应该显示默认页面hello / foo页面。
如果它似乎根本没有运行,请确保您已在app/AppKernel.php
方法的registerBundles()
文件中注册了捆绑包。