cakephp3 FriendsOfCake/search の設定について
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 2,092
FriendsOfCake/search を使用して検索を行いたい
現在、CAKEPHP3を習得するために勉強をしております。
CAKEPHPのチュートリアルはブログまで行いました。
そんな中で、様々な場所で検索をさせるのにFriendsOfCake/search
プラグインを使用して実装しようと考えております。
プラグインの導入はINDEX(一覧表示ページ)完了し、検索をかけたところ問題ありませんでした。
発生している問題・エラーメッセージ
FriendsOfCake/searchプラグインを使用することにより
BAKEで作成したaddでは新規追加できない。
BAKEで作成したeditでは編集した値が更新されない。
BAKEで作成したdeleteでは削除できず。
該当のソースコード
* Add method
*
* @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
*/
public function add()
{
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
}
$companies = $this->Users->Companies->find('list', ['limit' => 200]);
$this->set(compact('user', 'companies'));
$this->set('_serialize', ['user']);
}
/**
* Edit method
*
* @param string|null $id User id.
* @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise.
* @throws \Cake\Network\Exception\NotFoundException When record not found.
*/
public function edit($id = null)
{
$user = $this->Users->get($id, [
'contain' => []
]);
if ($this->request->is(['patch', 'post', 'put'])) {
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
}
$companies = $this->Users->Companies->find('list', ['limit' => 200]);
$this->set(compact('user', 'companies'));
$this->set('_serialize', ['user']);
}
/**
* Delete method
*
* @param string|null $id User id.
* @return \Cake\Network\Response|null Redirects to index.
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
$user = $this->Users->get($id);
if ($this->Users->delete($user)) {
$this->Flash->success(__('The user has been deleted.'));
} else {
$this->Flash->error(__('The user could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
試したこと
URLを見ると、パラメーターがわたっているのでpostではなくgetで飛ばしているのかなと推測し、各部位のコントローラーをpost からgetに変更したところ、add,deleteは動作したのですが、editのみ更新されない様子でした。
editの
if ($this->request->is(['patch', 'post', 'put'])) {
$user = $this->Users->patchEntity($user, $this->request->data);
の部分を修正すればいいのかなと思いますが、果たしてあっているのかがわからなくなってしまっております。
補足情報(言語/FW/ツール等のバージョンなど)
cakephp3
indexだけにプラグインを充てることは可能なのでしょうか?
現在コントローラーに
public function initialize()
{
parent::initialize();
$this->loadComponent('Search.Prg');
}
としてあるのですが、適応範囲をindexのみにしそのほかのアクションに対しては反応しないようにできれば一番いいのかなと思いますが可能なのでしょうか。
初歩的なご質問で大変恐縮ではありますが、何卒お教えいただけましたら幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
1点だけ確認です。
URLを見ると、パラメーターがわたっているのでpostではなくgetで飛ばしているのかなと推測し、各部位のコントローラーをpost からgetに変更したところ、add,deleteは動作したのですが、editのみ更新されない様子でした。
としていますが、POSTかGETかは、ブラウザで画面のソースを確認すれば判断できます
Templateのコードが提示されていないので、どこに修正を入れたのかはわかりませんが、BakeしたTemplaeteに修正を加えて、POSTからGETに変更したということでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
最初からBAKEしなおして試したところ動くようになりました。
DIFFって検証したいと思います。
ありがとうございました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.31%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/27 15:47
view側のコードに関しましては、見た目の部分は少し変更しているくらいですがフォーム回りではBakeした状態のままです。
マークダウン記法がまだわからないので読みにくくてすみません。
テンプレート側の add の部分は以下のようになっております。
<?= $this->Form->create($user) ?>
<fieldset>
<legend><?= __('Add User') ?></legend>
<?php
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->input('company_id', ['options' => $companies]);
echo $this->Form->input('role');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
2016/04/27 15:57
Editの画面をブラウザで表示して、右クリックメニューから「ソースを表示」でHTML形式のソースを表示させれば、POSTで送信していることがわかると思います
だとすると、POSTからGETに変更してaddとdeleteが動くようになったというのは、今ひとつ理解に苦しみますね
自分も、サンプル的に環境を作ってbakeしたコードで動かしてみましたが、問題なくPOSTで動いています
ちなみに、上手く動かないときは、画面上にエラーメッセージは表示されるのでしょうか?
2016/04/28 21:20
コメント投稿があった場合はメールで飛んでこないのですね。
設定でできるのかもしれないのですが、まだ使い慣れていなくて失礼いたしました。
firebugでformの要素を見るとPOST送信されているのですが、
SUBMITをクリックすると、画面遷移しない + FLASH文も表示されません。
変化している部分としては
URLが
..../add
から
add?name=a&email=a%40a.com&password=aa&company_id=1&role=1
となるので、GETに変更されたのかと認識した次第です。
コントローラー直下に下記内容として記述しているのですが、これが間違っているのでしょうか?
class UsersController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Search.Prg');
}
試しにイニシャライズを全体でコメントアウトするとPOSTされて無事登録が確認できます。
何がいけないのか全く分からなくなってしまっております。
ヒントでもいただければ幸いです。