2015-12-18 5 views
3

Проблема с маршрутизации Laravel при использовании ограничения на параметр с маршрутизацией без ->where('id', '[0-9]+');, но мне нужно добавить это.Ошибка маршрутизации группы Laravel

Route::group(['prefix' => '/{id}'], function() { 
    Route::post('/edit', 'User\[email protected]'); 
})->where('id', '[0-9]+'); 

Что вызывает следующую ошибку

вызов функции-члена, где() на не-объект

+0

Вы забыли добавить id в качестве параметра в функцию() [подробнее здесь] (http://laravel.com/docs/5.1/routing#r oute-parameters) изменить его на эту 'function ($ id) {}' – Joost

+0

добавлена, но такая же ошибка Вызов функции-члена where() для не-объекта –

+4

Я не верю, что вы можете применить, где фильтры для маршрутизации параметров на групп. Вы можете попробовать шаблон «Route ::» («id», «[0-9] +»); вместо этого –

ответ

2

Это правильный путь. Таким образом, вы можете определить несколько условий. Не проверено, но надеюсь, что вы получите эту идею.

Route::group([ 
    'prefix' => '/{id}', 
    'where' => [ 
     'id' => '[0-9]+' 
    ] 
    ], 
    function() { 
    Route::post('/edit', 'User\[email protected]'); 
}); 
+0

хорошо работает, спасибо –

0

where() может применяться только на get, resource и post т.д. Смотрите документацию here и раздел Regular Expression Constraints.

Итак:

get('user/{name}', function ($name) { 
    // code 
})->where('name', '[A-Za-z]+'); 

// post request 
$router->post(...)->where(['id' => '[0-9]+', 'name' => '[a-z]+']); 

// put request 
Route::put(...)->where(...); 
// delete request 
$router->delete(...)->where(...); 

и применяются для групп см awnser из @izupet

Для глобальных контрсилами можно использовать Route::pattern('id', '[0-9]+') или $router->pattern('id', '[0-9]+');

Или увидеть Router класс: vendor/laravel/framework/src/Illuminate/Routing/Router.php

+0

Спасибо, я следую ответам izzputs, но спасибо за обучение использованию шаблонов –

Смежные вопросы