2017-12-11 10 views
0

Drupal 8サイトでは、/ some/random/pathは "404 not found"を返します。実行時に、これらのパスの一部を傍受し、有効なものを返すように設定する必要があります。 ./src/Routing/RouteSubscriber.phpで、私が持っている、Drupal 8:404の経路を傍受し、200にコードを設定する

services: 
    mymodule.route_subscriber: 
    class: Drupal\MYMODULE\Routing\RouteSubscriber 
    tags: 
     - { name: event_subscriber } 

その後:次に

<?php 
namespace Drupal\MYMODULE\Routing; 

use Drupal\Core\Routing\RouteSubscriberBase; 
use Symfony\Component\Routing\RouteCollection; 

class RouteSubscriber extends RouteSubscriberBase { 
    protected function alterRoutes(RouteCollection $collection) { 
    if ($route = $collection->get('system.404')) { 
     $route->setDefault('_controller', '\Drupal\MYMODULE\Controller\MyController::load'); 
    } 
    } 
} 

./src/Controller/SpokeControllerで

は私が MYMODULE.services.ymlというファイルを追加しました.php、私は持っています:

class SpokeController extends ControllerBase { 

    public function load() { 
    $path = \Drupal::service('path.current')->getPath(); 

    if (path_is_valid()) { // I can only do this at runtime. 
     // Is there a way to add something here like: 
     // $this->setResponseCode(200); 
     // return a render array for the content. 
    } 
    else { 
     // return a render array like "page not found". 
    } 
    } 

} 

私のコントローラでは、404から20に応答コードを変更できますか0? (私は存在する$this->setResponseCode(200)のようなものを期待していますが、私はそれを見つけることができません。)

答えて

0

This change recordは、この達成するための方法について説明します。SpokeControllerで

を::負荷()、我々は含まれていレンダリングの配列を返すことができます次のようになります。

$render['#attached']['http_header'][] = ['Status', "200"]; 

ステータスコードが変更されます。

あなたはalterRoutes()に次の行を追加することができ、動的にタイトルを変更するには:

$route->setDefault('_title_callback', '\Drupal\steward_spoke\Controller\SpokeController::title'); 

を次に、SpokeControllerでタイトルを返す::タイトルを()。これらすべてが一緒になって、ルートのタイトル、コンテンツ、およびステータスコードを動的に返すことができます。

関連する問題