我需要在用戶點擊不存在的url時或當我以編程方式強制應用程序:: abort(404)時觸發自定義控制器。使用Laravel 5在404個網址上使用控制器
我該怎麼辦?
我的404視圖需要一些數據,並且一個簡單的刀片視圖(或ViewComposer)是不夠的。
感謝
PS捕獲所有的url不起作用,因爲他們不抓編程推出404
我需要在用戶點擊不存在的url時或當我以編程方式強制應用程序:: abort(404)時觸發自定義控制器。使用Laravel 5在404個網址上使用控制器
我該怎麼辦?
我的404視圖需要一些數據,並且一個簡單的刀片視圖(或ViewComposer)是不夠的。
感謝
PS捕獲所有的url不起作用,因爲他們不抓編程推出404
編輯render
功能App\Exceptions\Handler
類,並添加一些關於404
這裏:
if ($this->isHttpException($exception) && $this->getStatusCode() == 404) {
// Do what you want...
// You can even use the $request variable
}
舉例:
public function render($request, Exception $exception)
{
if ($this->isHttpException($exception) && $this->getStatusCode() == 404) {
echo 'hello from 404 renderer';
dd($request); // Or you can a view.
}
return parent::render($request, $exception);
}
如果例外是404
,請嘗試將redirect()
返回到您的自定義Controller
而不是response()
從Handler
的render()
方法。您可以從$request
中檢索請求的頁面,對嗎?
下面是示例:
public function render($request, Exception $exception)
{
if ($this->isHttpException($exception) && $this->getStatusCode() == 404) {
return redirect(route('route.to.custom.controller'))->with('request', $request);
}
return parent::render($request, $exception);
}
希望這將有助於,乾杯!
這種方法迫使一個不想要的301 –
我需要使用控制器,因爲我需要層次鏈中的一些方法 –
不確定使用太多控制器繼承是安全的設計。也許你可以將這些輔助方法從你的控制器中移開。但假設,你知道你在做什麼,我的方法不起作用,所以IDK如何在控制器中處理404(我*仍*認爲這不是正確的方式) –
你爲什麼認爲這是不安全的?我有一些複雜的邏輯來構建頁面。 層次鏈不是那麼大,我只有3層,有一些共享視圖邏輯。 404也將是一個複雜的頁面,它需要一些共享邏輯。我不能將這些方法移動到助手或ViewComponents中,因爲它們在很大程度上取決於請求哪個頁面。 –