2016-05-01 6 views
1

Drupal 8で新しいモジュールを作成しました。これはまあまあの世界の例です。 ちょうど以下drupal 8プログラムでノードを一度しか作成できません

class FirstController{ 
public function content(){ 
return array(
     '#type' => 'markup', 
     '#markup' => t('G\'day.............'), 
    ); 

// <------I added the new node code here 
} 
} 

ようなコード及びIは、ノードを作成するコンテンツ()関数に次のコードを追加しました。 しかし、私はそれが一度だけノードを作成することができ、その後、何度もモジュールページをリフレッシュしても、それ以上新しいノードは作成されません。

use \Drupal\node\Entity\Node; 
use \Drupal\file\Entity\File; 

// Create file object from remote URL. 
$data = file_get_contents('https://www.drupal.org/files/druplicon.small_.png'); 
$file = file_save_data($data, 'public://druplicon.png', FILE_EXISTS_REPLACE); 

// Create node object with attached file. 
$node = Node::create([ 
    'type'  => 'article', 
    'title'  => 'Druplicon test', 
    'field_image' => [ 
    'target_id' => $file->id(), 
    'alt' => 'Hello world', 
    'title' => 'Goodbye world' 
    ], 
]); 
$node->save(); 

私はここで間違っていますか?

答えて

2

あなたはキャッシングを忘れています:)あなたの出力はただキャッシュされているので、コードは一度だけ呼び出されます(正確には一度ではなくキャッシュが有効になるまで)。ここをクリックしてください:Render APIとここ:Cacheability of render arrays。あなたは以下のコードを使用して、現在のページ要求のキャッシュを無効にするには

:だから

\Drupal::service('page_cache_kill_switch')->trigger(); 

を、あなたのコントローラメソッドは次のようになります。

public function content() { 

    // Create file object from remote URL. 
    $data = file_get_contents('https://www.drupal.org/files/druplicon.small_.png'); 
    /** @var FileInterface $file */ 
    $file = file_save_data($data, 'public://druplicon.png', FILE_EXISTS_RENAME); 

    // Create node object with attached file. 
    $node = Node::create([ 
    'type'  => 'article', 
    'title'  => 'Druplicon test', 
    'field_image' => [ 
     'target_id' => $file->id(), 
     'alt' => 'Hello world', 
     'title' => 'Goodbye world' 
    ], 
    ]); 
    $node->save(); 

    \Drupal::service('page_cache_kill_switch')->trigger(); 

    return array(
    '#markup' => 'Something ' . rand(), 
); 
} 
+0

を実は、私が間違っていた:) ' max-age'はすべてのキャッシングが有効になっている匿名ユーザーの問題を解決しません。このような場合、現在のリクエストのキャッシュを完全に拒否するには、 '\ Drupal :: service( 'page_cache_kill_switch') - > trigger();を呼び出す必要があります。私は私の答えを変えた。 –

+0

ありがとうございます。 –

関連する問題