実現したいこと
以下のようにして、URLを整形し直したのですが、その新ルートルール が適応になって表示された先の画面で今まで出ていたFlashメッセージを表示させたいです
###前提(現在の実装)
https://ドメイン/コントローラー/メソッド/クラブID
というURLがあり、一部のクラブIDが乱数のようになっていたのでルートファイルに以下のような設定を追加しました
config/routes.php
$routes->connect('/clubs/confirm/cooking', ['controller' => 'Clubs', 'action' => 'confirm', 'fhdjsgs37msf71dj3jsfs']); このほか多数のURLの書き換え
その後リダイレクト処理を
src/Controller/AppController.php
へ記載しました
public function beforeFilter(\Cake\Event\Event $event) { ・ ・ //URLを変更したサロンはリダイレクトさせます $now_url = Router::url(); $patterns = [ "/", "/auth/login_for_pay/", など、routeファイルに新しく書き足したルール先のリダイレクトリンク ]; $club_id_dict = [ "fhdjsgs37msf71dj3jsfs" => "cooking", など ]; foreach ($patterns as $pattern) { foreach ($club_id_dict as $key => $value){ $checURL = $pattern . $key; $quoteURL = preg_quote($checURL, '/'); $machULR = '/^' . $quoteURL . '/*/'; if(preg_match($machULR, $now_url)){ $new_url = preg_replace('/' . $key . '/', $value, $now_url); $this->redirect($new_url, 301); } } }
発生している問題・エラーメッセージ
悪質ユーザーのログインを拒否した場合、ログインができないというメッセージと共にクラブの詳細画面に遷移します。
もともと認証コントローラーで出力していたそのフラッシュメッセージをどのように引き継げばいいのかわからずにいます
該当のソースコード
// save if ($this->Users->save($user)) { if ($user->banned === '1') { $this->Flash->error('ログインに失敗しました。'); $session = $this->request->getSession(); $clubId = $session->read('currentClub'); return $this->redirect('/clubs/view/'. $clubId); }
試したこと
色々とだめであるとは思いつつも、リダイレクトさせる前にsessionに取得したメッセージを保存して
src/Controller/AppController.php
if(preg_match($machULR, $now_url)){ $new_url = preg_replace('/' . $key . '/', $value, $now_url); //リダイレクト先にフラッシュメッセージの情報を引き継ぎます $session = $this->request->getSession(); $errorMessage = $session->read(); if(!empty($errorMessage)){ if($errorMessage['Flash']['flash'][0]['element'] === 'Flash/error'){ $message = $errorMessage['Flash']['flash'][0]['message']; $this->Flash->set($message); } } $this->redirect($new_url, 301); }
対象のViewファイルで以下のように呼び出してみましたが、変わりませんでした
<?= $this->Flash->render() ?>
各クラブのViewファイルはクラブIDがディレクトリ名になっています
ルートルールを書き換えた場合、もともと表示されていたような形でフラッシュメッセージを出すことはできるでしょうか?
2つのクラブに対して9項目のリダイレクト設定をかけているので、それぞれのフラッシュを出しているコントローラーでの操作ではなく、AppCOntrollerで一括でフラッシュメッセージを渡す方法を探しています
もし何かいい方法がありましたらご教授いただきたいです
よろしくお願いいたします
補足情報(FW/ツールのバージョンなど)
cakephp3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。