需要协助Symfony 2.7创建第一页

时间:2015-08-16 20:35:17

标签: php symfony

我正在尝试学习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"然后让控制器只是在页面上回显一些东西。超级基本的东西。我无法弄清楚如何实现这一目标。

任何人都可以帮忙吗?非常感谢...

3 个答案:

答案 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()文件中注册了捆绑包。