[英]Before executing Action in Laravel 5.1
我正在存儲和更新方法中編寫以下代碼:
$v = Validator::make($request->all(), [
'field' => 'required|max:100|min:5'
]);
if ($v->fails()) {
return redirect('route name')
->withErrors($v)
->withInput();
}
在執行任何操作方法之前是否有任何內置的操作方法? 如果是這樣,它對單個操作方法還是對控制器有效?
您可以使用中間件或覆蓋callAction
, https: callAction
use Illuminate\Routing\Controller;
class MyController extends Controller
{
public function callAction($method, $parameters)
{
// code that runs before any action
if (in_array($method, ['method1', 'method2'])) {
// trigger validation
}
return parent::callAction($method, $parameters);
}
}
2020年更新:
如果您發現自己在 Laravel 5+ 中重復使用驗證規則,我建議將它們添加到請求中:https ://laravel.com/docs/6.x/validation#form-request-validation
/**
* Store the incoming blog post.
*
* @param StoreBlogPost $request
* @return Response
*/
public function store(StoreBlogPost $request)
{
// The incoming request is valid...
// Retrieve the validated input data...
$validated = $request->validated();
}
一個內置的解決方案是使用中間件,但是我看到您希望為特定操作執行那段代碼。
如果我是你,我會創建一個具體的controller
類,我的所有控制器都將從它繼承,這個控制器看起來像這樣:
class FilteredController extends BaseController
{
private function getControllerAction(Request $request)
{
$action = $request->route()->getAction();
$controller = class_basename($action['controller']);
list($controller, $action) = explode('@', $controller);
return ['action' => $action, 'controller' => $controller];
}
private function validateUpdateRequests()
{
/* Validation code
that will run for update_post action,
and update_post ONLY*/
}
public function validateCreateRequests()
{
/* Validation code that will run for
create_post action, and
create_post ONLY.*/
}
public __construct(Request $request)
{
$route_details = $this->getControllerAction($request);
if($route_details['controller'] == 'postsController')
{
if($route_details['action'] == 'update_post')
{
$this->validateUpdateRequests();
}
else if($route_details['action'] == 'update_post')
{
$this->validateCreateRequests();
}
}
}
}
我希望這有幫助。
同樣,更好的方法是使用中間件,並且要使用中間件進行特定操作,您需要在路由中指定過濾,例如:
Route::get('/route_to_my_action', 'MyController@myAction')
->middleware(['my_middleware']);
有關 Laravel 中這種過濾方式的更多信息,請訪問文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.