CakePHP 3リダイレクトコントローラ -- cakephp フィールド と redirect フィールド と cakephp-3.0 フィールド 関連 問題

Cakephp 3 redirect controller












0
vote

問題

日本語

My CakePHP 3アプリケーションで、コントローラのリダイレクト後、このエラーが発生しました:

<事前> <コード> Error: [LogicException] Controller action can only return an instance of Response Request URL: /mycontroller/ Stack Trace: #0 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): CakeRoutingDispatcher->_invoke(Object(AppControllerSigninsController)) #1 /var/www/vhosts/example.com/httpdocs/webroot/index.php(37): CakeRoutingDispatcher->dispatch(Object(CakeNetworkRequest), Object(CakeNetworkResponse)) #2 {main}

CakePHP 2に関するコントローラのドキュメントリダイレクトはこんな感じでした:

<事前> <コード> $this->redirect('/orders/thanks'); $this->redirect('http://www.example.com'); return $this->redirect( array('controller' => 'orders', 'action' => 'confirm') );

しかしCakePhp 3 Documentation そのようです:

<事前> <コード> return $this->redirect('/orders/thanks'); return $this->redirect('http://www.example.com'); return $this->redirect( ['controller' => 'Orders', 'action' => 'thanks'] );

<コード> return Wordの前に $this->redirect を追加すると、エラーが解決されました。だから問題は問題になりますか? cakephp 3には、リターンリダイレクト部分が表示されませんでしたからです。移行ガイド。移行ガイド3番目のパラメータが削除されたことのみを示します。

英語

In my CakePHP 3 application, after a controller redirect I get this error:

Error: [LogicException] Controller action can only return an instance of Response Request URL: /mycontroller/ Stack Trace: #0 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): CakeRoutingDispatcher->_invoke(Object(AppControllerSigninsController)) #1 /var/www/vhosts/example.com/httpdocs/webroot/index.php(37): CakeRoutingDispatcher->dispatch(Object(CakeNetworkRequest), Object(CakeNetworkResponse)) #2 {main} 

Regarding to CakePHP 2 controller documentation redirect was like this:

$this->redirect('/orders/thanks'); $this->redirect('http://www.example.com'); return $this->redirect(         array('controller' => 'orders', 'action' => 'confirm')     ); 

But in CakePHP 3 documentation it seems like this:

return $this->redirect('/orders/thanks'); return $this->redirect('http://www.example.com'); return $this->redirect(             ['controller' => 'Orders', 'action' => 'thanks']         ); 

When I add return word before $this->redirect, error is solved. So does this makes problem ? Because I couldn't see a return redirect part in cakephp 3 migration guide. Migration guide only mentions that third parameter is dropped.

</div
        
 
 

回答リスト

3
 
vote

CakePHP 3アプリケーションは、他のページにリダイレクトしたい場合、または他のコントローラのアクション/メソッドを指定したい場合、または指定したように34Dパーティのリンクにリダイレクトしたい場合に使用されます。 -

<事前> <コード> return $this->redirect('/orders/thanks'); return $this->redirect('http://www.example.com'); return $this->redirect(['controller' => 'Orders', 'action' => 'thanks']);

と同じコントローラ内の他のメソッドにリダイレクトする場合は、以下のように戻り値の設定を残すことができますが、ここでURLは同じままです。

<事前> <コード> $this->setAction('thanks');

RETURNはより良いアプローチであり、下記のコードを使用するとURLがリダイレクトされます。

<事前> <コード> return $this->redirect(['action' => 'thanks']);
 

Return in CakePHP 3 application is used when you want to redirect to other pages or we can say actions/methods of other controllers or even if you want to redirect to 3rd Party Links like you have specified :-

return $this->redirect('/orders/thanks'); return $this->redirect('http://www.example.com'); return $this->redirect(['controller' => 'Orders', 'action' => 'thanks']); 

And if you want to redirect to other method in the same controller then you can leave the return and use setAction as below but here URL will remain the same.

$this->setAction('thanks');  

Return is better approach and URL will redirect if you use below code.

return $this->redirect(['action' => 'thanks']); 
</div
 
 
0
 
vote

この

応答は、次のような共通の応答関連タスクをラップするためのインタフェースを提供します。 リダイレクトのヘッダーを送信します。

and この

ビューレンダリングを防ぎ、実際のリダイレクトを処理できるように、アクションから応答インスタンスを返す必要があります。

 

Take a look at this

Response provides an interface to wrap the common response-related tasks such as: Sending headers for redirects.

and this

You should return the response instance from your action to prevent view rendering and let the dispatcher handle actual redirection.

</div
 
 
0
 
vote

ルート名を使用している場合は、これを使用してください -

<事前> <コード> $this->redirect(['_name' => 'view-details']);

ルートを使用してからこれを使用します -

<事前> <コード> $this->redirect('/page/view-details');

と最後のオプションはこれです

<事前> <コード> $this->redirect(['controller' => 'Pages', 'action' => 'view']); ----------------------------------------------------------------------

View FileにRoute Nameを使用する場合は、この使用 -

<事前> <コード> use CakeRoutingRouter; echo Router::url(['_name' => 'view-details']); echo Router::url(['controller' => 'Articles', 'action' => 'view', 'id' => 15]);
 

if you are using route name then use this-

    $this->redirect(['_name' => 'view-details']); 

you are using route then use this-

$this->redirect('/page/view-details'); 

and last option is this

$this->redirect(['controller' => 'Pages', 'action' => 'view']); ---------------------------------------------------------------------- 

if you are use route name in view file then this use-

use CakeRoutingRouter;  echo Router::url(['_name' => 'view-details']);  echo Router::url(['controller' => 'Articles', 'action' => 'view', 'id' => 15]); 
</div
 
 
0
 
vote

CakePHPでは、3.6の特定のビュー/ページに移動します。$ this-&gt; render( 'filename');

以下のように

公開機能検索() {

<事前> <コード> $this->render(); $this->render('profile'); }
 

In cakephp, 3.6 to go to specific view/page Use $this->render('filename');

like below

public function search() {

    $this->render();              $this->render('profile');  } 
</div
 
 
0
 
vote

オートレンダリングをオフにする必要があります

CakePHPメソッドはデフォルトでのリダイレクトでCTPファイル

に終了したいため

<コード> $this->autoRender = false 内部に機能

 

You need to turn off Autorendering

since cakephp methods by default want to end with a redirect to a CTP file

use $this->autoRender = false inside you function

</div
 
 

関連する質問

0  CakePHPを使用して同じクエリに2つのデータベースを照会してください  ( Query two databases in the same query using cakephp ) 
CakePHPアプリケーションには2つの別々のデータベースを使用します。 2つのデータベースからテーブルを結合するクエリを実行する必要があります。これはCakePHPで可能ですか? 私はあなたがCakePHPで複数のデータソースを持つことができることを知って...

0  CakePHP 3.0に関連する表を保存する方法  ( How to save associated table in cakephp 3 0 ) 
こんにちは、データを複数のテーブルに保存する機能を作成しました。 たとえ私はINの指示に従った CakePHP 3.0 データを1つのテーブルにのみ保存します。 私が逃したものを見てください。 ありがとう <事前> <コード> public functio...

11  CakePHP 3を含む  ( Count in contain cakephp 3 ) 
私はテーブルを持っています post を持っていて、これはテーブル星との の関連付けを持っています。 私は以下のすべてのデータを使ってすべての関連データを取得できます。 <事前> <コード> $this->Posts->find()->contain(['S...

0  CakePHPのプラグインを使用した認証コンポーネントリダイレクトの問題  ( Auth component redirection issue using plugin in cakephp ) 
このURLにリダイレクトされています http:// localhost / project_name / paneladmin /ユーザー/ログイン?Redirect =%2FPanelAdmin%2 2FUSERS%2FEDIT http:// loc...

0  ビン/ケーキベイク結果はありません  ( Bin cake bake no result ) 
<コード> ver3.0. の bookmark tutorial をフォローしています これらのコマンドを試してみました: <事前> <コード> bin/cake bake all users bin/cake bake all bookmarks bi...

1  CakePHP 3ネストリソースが正しく機能していません  ( Cakephp 3 nested resources not working properly ) 
むしろあいまいなタイトルの謝罪ですが、私が持っている問題をどのように説明するべきかどうかはわかりません。 私は 'admin' prefixルートが設定され、その接頭辞内にネストされたリソースを設定したいです。次のセットアップがあります。 <事前> <コード>...

1  MySQLリモートデータベースサーバー接続に失敗しました  ( Mysql remote database server connect failed ) 
私は自分のローカルマシンから<コード> Cakephp 3.x Remote Database Serverを接続しようとしています。 しかしそれは誤り を下回って示しています エラー:SQLSTATE [HY000] [2002]ホストへのルートなし ...

0  私はケーキ3を持つProdサーバーで白いページを取得しています  ( Im getting a white page in a prod server with cake 3 ) 
My CakePHP 3 WebサイトはWAMPでうまく機能し、私のウェブサイトをサーバーに転送しているとき、私は白いページを得ています。 私の歴史は私のサーバー上でURLの書き換えが有効になっているので、それがNY Htaccessファイルの1つに問題で...

0  CakePHP 3実行時にテーマが変更されました  ( Cakephp 3 theme change at runtime ) 
私はCakePHP 3テーマと仕事を始めます。私はのプロジェクトのBeforerender関数のAppControllerでテーマを設定できることを知っています <コード> $this->viewBuilder()->theme('ThemeName'); ...

3  自分のプラグインComposerコマンドを作成する方法  ( How to create my own plugin composer command ) 
私はGoogleでComposerコマンドを作成することができるCakePHPプラグインのためにどのように作成できるかを見つけました。 プラグインを作成し、他のCakePHPプラグインを公開したいので、Composerがダウンロードすることができ、簡単にインス...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有