【问题标题】:HTTP Routing in SymfonySymfony 中的 HTTP 路由
【发布时间】:2016-11-25 17:40:35
【问题描述】:

我已经在 Laravel 框架中开发很多项目已经有一段时间了,但我不是在为一家使用 Symfony 而不是 Laravel 的公司工作。

在适应 Symfony 的过程中,我对 HTTP 路由感到困惑。

在 Laravel 中,您指定 HTTP 方法并将其链接到路由,如下所示:

Route::get('/', 'PageController@index');
Route::post('/', 'PageController@contact');

如果你向'/'发送一个get请求,它会调用PageController中的index方法。如果您发送一个 post 请求,它将调用 PageController 中的联系方法。

现在在 Symfony 中,我不知道如何进行正确的 HTTP 路由。我见过人们用一种方法同时处理 get 和 post 请求。例如:

public function index()
{
     if ($request->isMethod('POST')) {
        // handle post request and return something
     }

     // return something else
}

我所做的,看起来很像 Laravel 的方式是指定 2 个单独的方法来处理每个请求:

/**
 * @Route("/", name="homepage")
 * @Method("GET")
 */
public function indexAction(Request $request)
{
    // return the index page
}

/**
 * @Route("/", name="contact")
 * @Method("POST")
 */
public function contactAction()
{
    // handle post request and return something
}

总结我的问题:

  1. 如何在 Symfony 中处理 post 请求?
  2. 处理这些请求的最佳做法是什么?
  3. 此类方法(indexPost/indexGet、indexAction/contactAction)的命名约定是什么?

提前致谢!

【问题讨论】:

  • 这可能会有所帮助:symfony.com/doc/current/best_practices/index.html 根据我的经验,最好先按照自己的方式理解框架,然后再尝试按照您习惯的方式做事。开箱即用,Symfony 控制器方法通常以 Action 结束。
  • 感谢您的回复。我已经阅读了大部分 Symfony 文档,但找不到任何关于处理帖子的具体内容。
  • 文档展示了 Symfony 处理已发布表单的方式:symfony.com/doc/current/forms.html#handling-form-submissions 似乎您实际上将其复制到了您的问题中。有些人说 get/post 应该由单独的操作来处理。但是,不管你喜不喜欢,Symfony 的方法很明确。

标签: php laravel symfony


【解决方案1】:

我会尝试解决你的每一个问题,

如何在 Symfony 中处理发布请求

YML 路由示例

my_route_post:
    path:     /route/path
    defaults: { _controller: AppBundle:Foo:edit }
    methods:  [POST]
my_route_get:
    path:     /route/path
    defaults: { _controller: AppBundle:Foo:show }
    methods:  [GET]

你可以定义控制器动作:

class FooController extends Controller {

    public function editAction(Request $request)
    {
        // POST request here
    }

    public function showAction()
    {
        // GET request here
    }
}

处理这些请求的最佳做法是什么

我认为创建控制器操作以处理每种 HTTP 请求类型或以与 GET 相同的方法处理 POST 请求的两种做法都很好。取决于哪一个最适合您的需求。

这些方法(indexPost/indexGet、indexAction/contactAction)的命名约定是什么?

控制器类中的每个动作方法都以 Action 为后缀 (同样,这不是必需的,但一些快捷方式依赖于此)。

发件人:https://symfony.com/doc/current/controller.html

【讨论】:

  • YAML 是大多数 Symfony 开发人员的方式吗?还是他们像我在示例中那样使用注释?是个人喜好吗?
  • 我不知道这些是否能给你带来性能提升,我知道 YAML、XML 和 Annotations 很流行,我认为这主要是个人喜好。 (我通常用 YAML 来做,因为它很清楚 imo)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多