前回の続き。
さて、ブラウザから投稿してみると、投稿後は編集画面に移動します。
この時点ではまだjobeet_job.is_activated=0なので、フロントには表示されていません。
Publishリンクを踏んで公開するようにしてみましょう。
/test/functional/frontend/jobActionsTest.php
>php test/functional/frontend/jobActionsTest.php
> 3.3 - On the preview page, you can publish the job
# get /job/new
# post /job
# put /job/e83769f22dcaf47b37b3b1c22b8e2d4586f6e6d8/publish
ok 1 - JobeetJob objects that matches the criteria have been found
click()の第三引数にはクリックする際の付加情報を記述します。
この場合はメソッドをPUTに、CSRFプロテクションを有効にしています。
ということらしいのですが意味がわかりません。
該当のリンクをブラウザで見てみましょう。
なんだこれ。
実はルーティングによって投稿記事の編集はPUTメソッドを使えということになっています。
勿論対応ブラウザやサーバなんて無いのでSymfonyではPOSTで擬似的に実現しています。
その疑似PUTを指定するのが'method' => 'put'です。
これを外してしまうとデフォルトのメソッド(GETかPOSTか不明)で送信されてしまい、エラーになります。
>php test/functional/frontend/jobActionsTest.php
# get /job/new
# post /job
# get /job/700cf9ac61d7abdd35e88720cf13be6b9d3584d2/publish
not ok 1 - JobeetJob objects that matches the criteria have been found
# Failed test (symfony/plugins/sfDoctrinePlugin/lib/test/sfTesterDoctrine.class.php at line 90)
次の_with_csrfについては全く意味がわかりません。
CSRFがどうこうと言ってますが別に外しても普通に動くし一体何の意味があるんだ。
リクエストのクエリを見るメソッドとか無いのかね?
PublishのかわりにDeleteリンクを押せば削除できますが、その流れもPublishとほぼ一緒です。
DeleteリンクはDELETEメソッドを使用することになっていますが、こちらも無論擬似的実現です。
/test/functional/frontend/jobActionsTest.php
Deleteリンクを踏むと投稿が削除され、position='F002'の投稿が見つからないよ、という状態になることを確認できます。
>php test/functional/frontend/jobActionsTest.php
> 3.3 - On the preview page, you can publish the job
# get /job/new
# post /job
# delete /job/34b28d5f5d5f3a7bc32c8b91ff61ea3e6ee8123f
ok 1 - no JobeetJob object that matches the criteria has been found
さて、ブラウザから投稿してみると、投稿後は編集画面に移動します。
この時点ではまだjobeet_job.is_activated=0なので、フロントには表示されていません。
Publishリンクを踏んで公開するようにしてみましょう。
/test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
10
11
|
$browser->info(' 3.3 - On the preview page, you can publish the job')->
createJob(array('position' => 'FOO1'))->
click('Publish', array(), array('method' => 'put', '_with_csrf' => true))->
with('doctrine')->begin()->
check('JobeetJob', array(
'position' => 'FOO1',
'is_activated' => true,
))->
end()
;
|
>php test/functional/frontend/jobActionsTest.php
> 3.3 - On the preview page, you can publish the job
# get /job/new
# post /job
# put /job/e83769f22dcaf47b37b3b1c22b8e2d4586f6e6d8/publish
ok 1 - JobeetJob objects that matches the criteria have been found
click()の第三引数にはクリックする際の付加情報を記述します。
この場合はメソッドをPUTに、CSRFプロテクションを有効にしています。
ということらしいのですが意味がわかりません。
該当のリンクをブラウザで見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<a onclick="var f = document.createElement('form');
f.style.display = 'none'; this.parentNode.appendChild(f);
f.method = 'post';
f.action = this.href;
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', 'sf_method');
m.setAttribute('value', 'put');
f.appendChild(m);
f.submit();
return false;"
href="/frontend_dev.php/job/
151bef1f9cf92b7b561752e4ad35cfe932a92f4b/publish">Publish</a>
|
なんだこれ。
実はルーティングによって投稿記事の編集はPUTメソッドを使えということになっています。
勿論対応ブラウザやサーバなんて無いのでSymfonyではPOSTで擬似的に実現しています。
その疑似PUTを指定するのが'method' => 'put'です。
これを外してしまうとデフォルトのメソッド(GETかPOSTか不明)で送信されてしまい、エラーになります。
>php test/functional/frontend/jobActionsTest.php
# get /job/new
# post /job
# get /job/700cf9ac61d7abdd35e88720cf13be6b9d3584d2/publish
not ok 1 - JobeetJob objects that matches the criteria have been found
# Failed test (symfony/plugins/sfDoctrinePlugin/lib/test/sfTesterDoctrine.class.php at line 90)
次の_with_csrfについては全く意味がわかりません。
CSRFがどうこうと言ってますが別に外しても普通に動くし一体何の意味があるんだ。
リクエストのクエリを見るメソッドとか無いのかね?
PublishのかわりにDeleteリンクを押せば削除できますが、その流れもPublishとほぼ一緒です。
DeleteリンクはDELETEメソッドを使用することになっていますが、こちらも無論擬似的実現です。
/test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
10
|
$browser->info(' 3.3 - On the preview page, you can publish the job')->
createJob(array('position' => 'FOO2'))->
click('Delete', array(), array('method' => 'delete', '_with_csrf' => true))->
with('doctrine')->begin()->
check('JobeetJob', array(
'position' => 'FOO2',
), false)->
end()
;
|
Deleteリンクを踏むと投稿が削除され、position='F002'の投稿が見つからないよ、という状態になることを確認できます。
>php test/functional/frontend/jobActionsTest.php
> 3.3 - On the preview page, you can publish the job
# get /job/new
# post /job
# delete /job/34b28d5f5d5f3a7bc32c8b91ff61ea3e6ee8123f
ok 1 - no JobeetJob object that matches the criteria has been found
PR
トラックバック
トラックバックURL: