2015-03-05 18 views
7

Gần đây tôi đã bắt đầu sử dụng Laravel 5 và gặp nhiều rắc rối khi triển khai hệ thống không chỉ cho phép người dùng, mà còn kiểm tra quyền.Cách thêm nhiều mục vào Middleware trên Route trong Laravel 5

Trong tất cả các ví dụ tôi đã đào tạo trực tuyến, tôi thấy hai mục đang được áp dụng làm phần mềm trung gian. Ví dụ:

Route::group(['middleware' => ['auth', 'permissions']], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}); 

Tuy nhiên, tôi không thể làm việc này bất kể tôi làm gì. Tôi chỉ có thể áp dụng một mục làm phần mềm trung gian, chẳng hạn như:

Route::group(['middleware' => 'auth'], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}); 

Nếu tôi áp dụng hai, tôi gặp lỗi "Route [admin] not defined".

Tôi đã thử mọi thứ tôi có thể nghĩ đến, và tôi đập đầu vào một bức tường gạch. Làm thế nào trên trái đất tôi có thể áp dụng hai hoặc nhiều mặt hàng trung gian cho một tuyến đường?

+1

mã đầu tiên là đúng, những gì lỗi nào bạn nhận được? –

+0

Âm thanh với tôi giống như phần mềm trung gian 'quyền' là vấn đề thực tế. Chúng ta có thể thấy mã đó không? – lukasgeiter

+0

Thất vọng, tôi đã xóa mã này và xóa mã đó khỏi đầu. Nhận xét của bạn về các quyền đã khiến tôi tìm ra vấn đề. Trong mã, tôi đã sử dụng 'return redirect() -> route ('admin'); thay vì 'chuyển hướng ('quản trị'); –

Trả lời

1

tôi trả lời câu hỏi của riêng tôi càng nhiều người bỏ lỡ những nhận xét mà các giải pháp được đề cập.

Sự cố nằm trong phần mềm trung gian Cấp phép, như được đề cập trong nhận xét do lukasgeiter đưa ra.

Như đã thấy trong bài trả lời của tôi, câu trả lời đã được tìm thấy trong các điều khoản trung gian, nơi đã sử dụng:

return redirect()->route('admin'); 

thay vì:

redirect('admin'); 

Có thực sự không có gì sai với mã trong tôi tệp routes.php.

1

Bạn có thể thử tạo một phần mềm trung gian làm nhiều hơn việc xác minh?

Trong Kernel.php của bạn, bạn có thể có một cái gì đó như:

protected $routeMiddleware = [ 
    'auth' => 'Your\Route\Authenticate', 
    'auth.permissions' => 'Your\Route\AuthenticateWithPermissions' 
    'permissions' => 'Your\Route\RedirectIfNoPermissions' 
] 
0

Bạn cas sử dụng class này.

Trong trường hợp của tôi, chẳng hạn như của bạn bạn cần phải thiết lập các điều khoản vai trò loại vào nhóm của bạn:

Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){ 
    //Your Routes 
} 
1

Tôi nghĩ rằng bạn có lỗi trong ngoặc đơn. code của bạn nên trông giống như:

Route::group(['middleware' => ['auth', 'permissions'], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}]); 

Kiểm tra khung bế mạc ...

1

Lỗi này Tuyến đường [quản trị] không được xác định là do tên tuyến đường quản trị không được xác định.

Tên tuyến đường và Tuyến đường là hai thứ khác nhau.

Và bạn đã tuyên bố con đường tuyến đường như admin,

Route::get('admin', '[email protected]'); 

Tuy nhiên,

return redirect()->route('admin'); 

có nghĩa là bạn đang chuyển hướng dòng chảy để các tuyến đường được đặt tên quản trị.

Để sắp xếp các lỗi,

Xác định tên đường quản trị như sau trong một mảng được định nghĩa dưới đây với 'as' => 'route_name'.

Giải pháp:

Route::get('admin', [ 
    'as' => 'admin', 
    'uses' => '[email protected]' 
]); 

Vui lòng tham khảo link: https://laravel.com/docs/master/routing#named-routes

Các vấn đề liên quan