Symfony,使用404状态返回代码重定向到(或呈现)404自定义错误页面

时间:2017-10-24 22:22:48

标签: php symfony redirect http-status-code-404

在symfony中,当我在数据库中找不到元素时,如何从控制器重定向到自定义404错误页面?

例如:

if ( empty($db_result) ) {
    /* DO REDIRECT */
} else {
    return $this->render('default/correct.html.twig');
}

2 个答案:

答案 0 :(得分:2)

如果路由提供唯一值(通常是ID,但可能是用户名或简单文本),则SensioFrameworkExtraBundle ParamConverter可以自动获取实体(数据库记录)。

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
/**
 * @Route("/blog/{id}")
 * @ParamConverter("post", class="SensioBlogBundle:Post")
 */
public function showAction(Post $post)
{
}

通过单独使用方法签名,这是非常常见的,更简单快捷的方法:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
/**
 * @Route("/blog/{id}")
 */
public function showAction(Post $post) 
{
    // $post will be the database record - if it exists
}

在'prod'环境(实时服务器)中,如果访问/blog/1时'post'表中没有记录,id:1(例如),则框架将生成404你错了。

如果您想自己进行搜索(或更复杂),可以进行'NotFoundHttpException',或使用控制器快捷方式执行此操作:

public function indexAction(/* parameters, like Request, or maybe $id */)
{
    // retrieve the object from database
    $product = ...;
    if (!$product) {
        throw $this->createNotFoundException('The product does not exist');
    }

    return $this->render(...);
}

答案 1 :(得分:0)

尝试这种方式:

 <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.json" Version="10.0.3" />
  </ItemGroup>
</Project>