質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

3444閲覧

cakephp3 duplicateアクションの実装

Shinroh

総合スコア61

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/03/21 04:26

bakeで生成した既成のaddアクションとeditアクションをかいつまんで記事の複製機能(duplicateアクション)を実装しようと思いましたが、うまくいきません。

どうやってもsaveが失敗してエラー処理側に入ってしまいます。
実装するうえでのポイントをご教示いただけないでしょうか。

UserController.php
duplicate action

php

1 $new_user = $this->Users->newEntity(); 2 if ($this->request->is(['patch', 'post', 'put'])) { 3 $new_user = $this->Users->patchEntity($new_user, $this->request->data); 4 if ($this->Users->save($new_user)) { 5 $this->Flash->success(__('The user has been saved.')); 6 return $this->redirect(['action' => 'index']); 7 } else { 8 $this->Flash->error(__('The user could not be saved. Please, try again.')); 9 } 10 } 11 $user = $this->Users->get($id, [ 12 'contain' => ['Companies'] 13 ]); 14 $companies = $this->Users->Companies->find('list', ['limit' => 200]); 15 $this->set(compact('user', 'companies')); 16 $this->set('_serialize', ['user']);

duplicate.ctp

php

1 <?= $this->Form->create($user) ?> 2 <fieldset> 3 <legend><?= __('Edit User') ?></legend> 4 <?php 5 echo $this->Form->input('companies_id', ['options' => $companies]); 6 echo $this->Form->input('name'); 7 echo $this->Form->input('mail'); 8 echo $this->Form->input('login_name'); 9 echo $this->Form->input('login_password'); 10 echo $this->Form->input('image'); 11 echo $this->Form->input('cookie'); 12 echo $this->Form->input('administrator_flg'); 13 echo $this->Form->input('deleted', ['empty' => true]); 14 ?> 15 </fieldset> 16 <?= $this->Form->button(__('Submit')) ?> 17 <?= $this->Form->end() ?>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そういう時は、$new_userを作った後に見てみればいいですよ。

PHP

1$new_user = $this->Users->patchEntity($new_user, $this->request->data); 2print_r($new_user); 3exit; 4```簡単な方法では上記のように書き、ソースを見ればいいです。

投稿2016/03/21 05:26

shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shinroh

2016/03/21 09:07 編集

ありがとうございます。 ひとまず教えていただいた通りにエンティティの中身を表示してみました。 App\Model\Entity\User Object ( [companies_id] => 1 [name] => **** [mail] => *****@gmail.com [login_password] => $2y$10$SRfUzzvsq9xPoH9tSGYTr.8BTS2jBNWqsHpBxKLBUeZPfqJjsSOJq [image] => *****.jpg [cookie] => [administrator_flg] => [[new]] => 1 [[accessible]] => Array ( [*] => 1 ) [[dirty]] => Array ( [companies_id] => 1 [name] => 1 [mail] => 1 [login_password] => 1 [image] => 1 [cookie] => 1 [administrator_flg] => 1 ) [[original]] => Array ( ) [[virtual]] => Array ( ) [[errors]] => Array ( [login_name] => Array ( [unique] => The provided value is invalid ) ) [[invalid]] => Array ( [login_name] => 1 ) [[repository]] => Users ) administrator_flg までは定義したカラムの項目なのですが、その次のnew以降は自動的に付加されるものなのでしょうか・・・? addアクションが成功するときには値が入っていなかったerrors => login_name => unique の中にエラーメッセージが入っているようですが、どういうときにこのメッセージが入ってくるのでしょうか…。
shi_ue

2016/03/21 09:14

login_nameがuniqueになってませんか?
Shinroh

2016/03/21 10:09

ああ、なるほど、少しやってみます。
Shinroh

2016/03/21 10:10

解決しました。 お騒がせしました(涙)
shi_ue

2016/03/21 10:11

後学者のために解決した理由を書いてくださいませんか?
Shinroh

2016/03/21 12:12

失礼しました。 単純に複製して表示されたduplicateアクションで、ユニークの値を更新しないまま登録しようとしていました。 一意になっているカラムの値を一意の値に変更してやったらうまくいきました。
shi_ue

2016/03/21 12:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問