【问题标题】:Routing issue with Symfony 1.4Symfony 1.4 的路由问题
【发布时间】:2013-05-20 15:50:55
【问题描述】:

我必须升级以前由其他人使用 Symphony 1.4 开发的应用程序。

在我的 action.class.php 中有两个不同的函数:

public function executeCreateTask(sfWebRequest $request) {...}
public function executeCreateEvent(sfWebRequest $request) {...}

在我的 routing.yml 我有 2 条路线:

evaluation_task_create:
 url:     /evaluation/:id/task/create
 class:   sfDoctrineRoute
 options: { model: Evaluation, type: object }
 param:   { module: evaluation, action: createTask, sf_format: html }
 requirements: { sf_method: post }

evaluation_event_create:
 url:     /evaluation/:evaluation_id/event/create
 class:   sfDoctrineRoute
 options: { model: CustomEvent, type: object }
 param:   { module: evaluation, action: createEvent, sf_format: html }
 requirements: { sf_method: post } 

网址 http://www.mysite/evaluation/21/task/create 完美运行(创建新任务)

网址 http://www.mysite/evaluation/21/event/create 返回 404 错误。

知道我为什么会遇到这个路由问题吗?

【问题讨论】:

  • 您是在执行 GET 还是 POST 请求?请注意,您的第二条路由包含requirements: { sf_method: post }。如果这不是问题,您的 debug 设置是否设置为 true?您收到的确切错误消息是什么?
  • 请求由带有 POST 方法的表单触发。我没有收到任何错误,它只是跳转到 Symfony 的 404 错误页面。
  • 这个错误页面说什么?您是否收到带有 Empty module and/or action after parsing the URL "/evaluation/21/event/create" (/). 之类消息的 sfError404Exception`?
  • 我真的不知道 sfDoctrineRoute 的作用,因为我使用的是 Propel,但数据库中是否存在主键为 21 的 CustomEvent?
  • “糟糕!找不到页面,服务器返回 404 响应。”日志文件没有错误。 21 是 evaluation_id 的值。也许我错了,但我认为这是一个路由错误,但我不明白为什么......

标签: symfony1 symfony-1.4 yaml


【解决方案1】:

您需要能够进一步调试,因为您没有收到 sfError404Exception。您是否在 ApplicationConfiguration 中将 debug 设置为 true?您可以在您的 dev 环境的 webdispatcher 中执行此操作。

$configuration = ProjectConfiguration::getApplicationConfiguration(
    'backend',
    'dev',
    true
);

在你的应用程序的settings.yml:

dev:
  error_reporting: <?php echo (E_ALL | E_STRICT)."\n" ?>
  web_debug: true

并在您的应用程序的factories.yml 中确保您已设置

dev:
  logger:
    param:
      loggers:
        sf_web_debug:
          param:
            xdebug_logging: true

【讨论】:

  • 我得到一个 sfError404Exception :"解析 URL "/evaluation/event/create" (/) 后的空模块和/或操作。"
  • 所以你设法解决了你的问题?您是否注意到/evaluation/event/create 不包含:id?还要确保在生产环境中禁用调试。
【解决方案2】:

evaluation 模块的createEvent 操作中,您可能有类似

 $this->evalution = $this->getRoute()->getObject();

要从路由中获取正确的对象,您需要使用:id 变量作为对象的id,并指定正确的模型Evaluation 而不是CustomEvent。所以尝试将evaluation_event_create路由改为:

evaluation_event_create:
  url:     /evaluation/:id/event/create
  class:   sfDoctrineRoute
  options: { model: Evaluation, type: object }
  param:   { module: evaluation, action: createEvent, sf_format: html }
  requirements: { sf_method: post }

并清除缓存。

【讨论】:

  • 也许他想使用CustomEvent?我认为默认情况下,url 中的所有变量都会传递给从数据库中检索此类对象的方法。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多