2017-02-08 3 views
0

をした後、コントローラの関数名を示すのCodeIgniter:コントローラ名とは異なるビュー名は、URLは、私はCodeIgniterののv3.1.3を使用しているPOSTの代わりに、ビュー

主にユーザー管理機能のすべてが含まれていることを私はUser.phpと呼ばれるコントローラを持っています(ログイン、...、update_user、forgot_password、update_settingsを、登録)

そして、私はこのビューで、二つの形式が用意されていProfile.phpと呼ばれるビューを持って、一つはのは、ユーザーが更新Form1の、それを呼びましょうinfo(email、first_name、last_name)と別のものを、Form2と呼びましょう。ユーザー設定を更新します(news_l etter_subscription、website_theme、allowed_countries_login ...)

をForm1提出ユーザコントローラ内の関数 update_user

Form2のupdate_settingsに提出ユーザコントローラ私が提出するたび

機能これらのフォームの1つは、提出後、www.example.com/profileのままではなく、www.example.com/update_userまたはwww.example.com/update_settingsになります(私の見解はpr ofile)。

私のルートは以下の通りです:User.phpコントローラで

$route['update_user']['POST'] = 'user/update_user'; 
$route['update_settings']['POST'] = 'user/update_settings'; 

マイupdate_user機能: http://pastebin.com/zQNn6Ykz

提出後、URLが/プロフィールままではなく、私はそれを作ることができますどのようにすることを/ update_userまたは/ update_settings?

私もデータを渡しているので、load-> viewを使用しているので、提出後にプロファイルページにリダイレクトすることはできません。

ありがとうございます!

編集:この問題を解決するには、AJAXコールを作成するか、update_user関数とupdate_settings関数をビューProfile()と同じ関数にマージして、取るべき行動。しかし、私は正直なところ私の問題を解決するための解決策を探しています、それは可能ですか?

+0

これはUser.phpコントローラの私のupdate_user機能で、あなたのコントローラ機能 –

+0

を示しています。http://pastebin.com/zQNn6Ykz – Lambasoft

+0

最初update_userを、あなたがさらにしてください手の込んだことができ申し訳 –

答えて

1

あなたはserver.com/profileにいますが、同じコントローラに別の関数を呼び出してフォームを保存しても、ブラウザにはserver.com/profileにあると言われます。

これが問題であれば、これを達成する2つの方法が考えられます。

ヒストリブラウザのオブジェクトを操作してJavascriptで簡単に変更するのが簡単です。

プロファイルビューにこのJavascriptコードを追加すると、ロードするたびにnew_urlが表示されます。それに応じてパラメータを変更します。

window.history.pushState("object or string", "Title", "/new-url"); 

https://developer.mozilla.org/en-US/docs/Web/API/History_API

別の解決策は、すべてのフォームから/プロファイルを呼び出すことであろう。これは、ユーザーコントローラーのプロファイル関数を呼び出します。そこには何が通過したか最初に確認できます。

データに$ _POSTがある場合は、プロファイルを表示する前にまず保存する必要があることがわかります。次に、ユーザコントローラ内の適切な機能を呼び出すためにどの形式が送信されたかを検出するだけです(つまり、$this->update_settings())。

+0

私はあなたの2番目の解決策を念頭に置いていましたが、他に解決策が見つからなければそれをやろうとしていました。私はそれが最善の解決策だと思うが、私は自分の関数を何かに関連して呼び出すことを好む。私は関数のProfile(ビューと同じ)を呼び出さなければならない – Lambasoft

+0

それはあなたの見方に依存する。この関数では1行しかコードではありませんが、関数は何かをします。そうではなく、その機能(URLインタフェース)が何をしているのかということです。CIがURLを関数にマップする方法を見て、関数の名前を取るためにどの視点を取るべきかを決める必要があります。 –

+0

答えがありがとうD – Lambasoft

0

あなたは(あなたがそれを隠すためにいくつかのCSSを追加する必要があります)あなたのビューに(例:my_iframeため。)名前の非表示のiframeを追加することができます。

<iframe src="_blank" name="my_iframe"></iframe> 

次に、「ターゲット」を置きます属性と一致するiframeの名前:

<form action="update_settings" method="post" target="my_iframe"> 

フォームを送信すると、バックグラウンドでフォームが送信されます。おそらく、結果を取得するためにいくつかのjavascriptを使用する必要があります。

希望します。

+0

まあ、私は単純にアクションと呼ばれる隠された入力を追加することができます: '' そして私のフォームを私のユーザのProfileその入力の機能チェックを行い、プロファイルを更新するか、または設定を更新するかを決定します。しかし、私は別の方法を探していましたか? – Lambasoft

+0

@ Lambasoft :)それは私の提案の1つでした。 –

+0

送信イベントがトリガーされると、URLが必然的に変更されます... user/update_userとuser/update_settingsの内容を完了した後でリダイレクトを返すことができます –

関連する問題