私は現在、Laravel 4 フレームワーク上に構築された cms に取り組んでいます。Blade テンプレート システムを使用してモジュール ビューをページ ビューに含めることができる、Pyro CMS に似たプラグイン システムを構築しようとしています。
正常に送信された場合、ユーザーを特定の URL にリダイレクトするか、単に既存のページにリダイレクトするコンタクト フォーム プラグインを構築しています。
私の連絡先フォームクラスのコードは次のとおりです。
class Contact {
public static function form($params)
{
//get params and execute relevant logic here
$redirect = isset($params['redirect']) ? $params['redirect'] : Request::url();
$data = Input::all();
if($data)
{
// Run validation and send message here
return Redirect::to($redirect)
}
return View::make('contact_form_view');
}
}
使用されるルートに応じて適切なページ ビューを表示するページ コントローラーがあり、ユーザーが連絡先フォームを任意のページ テンプレートにドロップし、以下に示すようにテンプレート ビュー内からフォーム関数を呼び出すことで簡単にカスタマイズできるという考えがあります。
<html>
<head>
</head>
<body>
{{ Contact::form(array(
'to' => 'myemail@mydomain.com',
'view' => 'contact_form_1',
)) }}
</body>
</html>
これは、リダイレクトを除いてすべて正常に機能します。フォームが正常に送信され、メッセージが送信されると、ページが更新され、連絡先フォームの代わりに次のメッセージが表示されます
HTTP/1.0 302 Found Cache-Control: no-cache Date: Tue, 17 Sep 2013 09:14:16 GMT Location: http://localhost:8888/my_initial_route Redirecting to http://localhost:8888/my_new_route.
約 2 秒後にリダイレクトが行われ、ブラウザはユーザーが $params 配列で指定したルートにリダイレクトされます。リダイレクトが指定されていない場合は、上記の例のように現在のページにリダイレクトされます。
なぜこれを行っているのかについての提案と、解決策は素晴らしいでしょう。
ありがとう!
編集:
上記のアプローチを採用した理由を簡単に説明すると、問題の理解に役立つ可能性があります。
プロジェクトの要件は、最終的に cms を使用する開発者が、[ページの追加] ボタンをクリックして、cms コントロール パネルを介して無限の量のページを作成できることです。アイデアは、作成する新しいページごとに新しいページ コントローラーを作成するわけではないということです。それを念頭に置いて、次のルートがあります。
Route::any('{page_slug}/page', array('as' => 'frontend.page', 'uses' => 'FrontendPagesController@display_page'))->where('page_slug', '[-A-Za-z0-9_-]+');
display_page
大幅にスリム化された機能は次のとおりです。
public function display_page($slug)
{
$page = PagesModel::getPageBySlug($slug);
return View::make($page['view_name']);
}
これにより、ユーザーはボタンをクリックしてページを作成し、名前とスラッグを付けることができます。アプリは、新しいルートを追加することなく、そのページと、ページの作成時に定義された対応するビューを表示できます。 、コントローラーなど
この問題は、ユーザーがページに連絡先フォームを含めたい場合に発生します。フォームを追加するかどうか、どのフィールドを使用するか、どのような検証が必要かをどのように知ることができますか? 開発者が cms コードに触れることなく、完全にカスタムの連絡先フォームを任意のページに追加できる方法が必要です。これに対する私の解決策は、上記のアプローチでした。開発者はタグをビューにドロップし、フォーム機能をカスタマイズするいくつかのパラメーターを関数に渡します。
このContact::form()
関数は、フォームのコントローラーのようなものです。from html を含むビューを取得して返し、送信を処理し、結果に応じて成功/エラー メッセージを返します。
必ずしも上記のアプローチを使用する必要はありませんが、コンタクト フォーム コントローラーをページ コントローラーから分離し、開発者が cms バックエンド コードに触れることなく任意のページにフォームを追加できるようにする方法が必要です。
これに関するアイデアは素晴らしいでしょう。