我有一个控制器来控制前端的页面。在某些页面上有一个表单,我希望能够从同一页面发布表单(例如/ contact / form)。因此,表单生成的功能与任何常规页面相同。
我想要的是页面功能可以捕获是否有帖子,验证输入字段,如果没有,则在同一个生成的页面上显示错误消息。
我想知道什么是最好的方法?我可以轻松地做下面的事情吗?
protected $rules = [
'firstname' => ['required'],
'lastname' => ['required'],
'email' => ['required']
];
public function page($slug = null) {
if(isset($_POST)) {
$this->validate($request, $this->rules);
// etc etc
}
$page = Page::where('slug', $slug)->first();
// return view
}
这会验证,如果没有显示相同的“生成”错误网页?
哦,如何更改routes.php以接受post和get?
我现在将其设置为any
:
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page'])->where('slug', '[a-zA-Z0-9\-_\/]+');
但无法使用以下内容捕获任何POST:
if (Request::isMethod('post')) {
die('caught POST');
}
我的完整路线是:
Route::pattern('slug', '[a-zA-Z0-9\-_\/]+');
if(isset($_SERVER['REQUEST_URI'])) {
$slug = $_SERVER['REQUEST_URI'];
$slug = explode('?', $slug);
$slug = explode('/', $slug[0]);
if(!$slug[1]) {
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page'])->where('slug', 'home');
} else {
if($slug[1] != 'dashboard' && $slug[1] != 'migrate' && $slug[1] != 'form-submit') {
if (in_array($slug[1], Page::lists('slug')) && !isset($slug[2])) {
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page'])->where('slug', '[a-zA-Z0-9\-_\/]+');
// if there is a second slug, go to PagesController@element
} elseif (in_array($slug[2], ElementValue::where('element_field_id', 2)->lists('value_char'))) {
Route::any('/{slug}', ['as' => 'pages.element', 'uses' => 'PagesController@element'])->where('slug', '[a-zA-Z0-9\-_\/]+');
} else {
Route::any('/{slug}', ['as' => 'pages.page', 'uses' => 'PagesController@page'])->where('slug', 'home');
}
}
}
}