在控制器中捕获get / post然后验证

时间:2015-11-06 18:03:38

标签: laravel-5

我有一个控制器来控制前端的页面。在某些页面上有一个表单,我希望能够从同一页面发布表单(例如/ 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');
            }
        }
    }
}

0 个答案:

没有答案