在symfony中,当我在数据库中找不到元素时,如何从控制器重定向到自定义404错误页面?
例如:
if ( empty($db_result) ) {
/* DO REDIRECT */
} else {
return $this->render('default/correct.html.twig');
}
答案 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>