2015-07-16 25 views
5

Tôi đang sử dụng xác thực yêu cầu biểu mẫu và có một số quy tắc cần giá trị bên ngoài làm tham số.Xác nhận yêu cầu biểu mẫu Laravel 5 với thông số

Dưới đây là quy tắc xác nhận của tôi để chỉnh sửa một hồ sơ kinh doanh bên trong một lớp học theo yêu cầu hình thức,

public function rules() 
{ 
    return [ 
     'name' => 'required|unique:businesses,name,'.$business->id, 
     'url' => 'required|url|unique:businesses' 
    ]; 
} 

Tôi có thể sử dụng trên bộ điều khiển theo loại gợi ý nó.

công chức năng postBusinessEdit (BusinessEditRequest $ yêu cầu, kinh doanh $ kinh doanh) {

}

Nhưng làm thế nào để vượt qua các đối tượng kinh doanh $ như một tham số cho phương thức quy tắc?

+0

nhập khẩu mô hình (i giả $ kinh doanh là một mô hình) vào lớp yêu cầu của bạn và lấy đối tượng theo cách thủ công –

+0

@NehalHasnayeen có doanh nghiệp là một mô hình nhưng nó là kiểu được ám chỉ đến phương pháp điều khiển có sử dụng các ràng buộc mô hình tuyến đường. –

Trả lời

4

phép nói rằng đây là mô hình của bạn ràng buộc:

$router->model('business', 'App\Business'); 

Sau đó, bạn có thể tham khảo các lớp Business từ bên trong đối tượng FormRequest như thế này:

public function rules() 
{ 
    $business = $this->route()->getParameter('business'); 
    // rest of the code 
} 

Lưu ý rằng nếu bạn sử dụng yêu cầu hình thức của bạn cả để tạo và cập nhật xác thực, trong khi tạo bản ghi, biến kinh doanh sẽ là null vì đối tượng của bạn chưa tồn tại. Vì vậy, hãy cẩn thận để thực hiện các kiểm tra cần thiết trước khi tham chiếu các thuộc tính hoặc phương thức đối tượng.

8

Có thể có nhiều cách để đạt được điều này. Tôi làm như sau.

Bạn có thể có một lĩnh vực ẩn 'id' trong hình thức kinh doanh của bạn như dưới đây,

{!! Form::hidden('id', $business->id) !!} 

và bạn có thể lấy id này trong FormRequest như dưới đây,

public function rules() 
{ 
    $businessId = $this->input('id'); 

    return [ 
     'name' => 'required|unique:businesses,name,'.$businessId, 
     'url' => 'required|url|unique:businesses' 
    ]; 
} 
+0

Tôi nghĩ câu trả lời này đơn giản hơn câu trả lời được chấp nhận. –

0

Đối với những người chuyển sang laravel 5:

public function rules() 
{ 
    $business = $this->route('business'); 
    // rest of the code 
} 
0

Giả sử nếu chúng ta có kịch bản như chúng tôi muốn thay đổi các quy tắc xác thực của chúng tôi phụ thuộc vào số type mà chúng tôi chuyển vào bằng tuyến đường. Ví dụ:

app.dev/business/{type} 

Đối với loại hình kinh doanh khác nhau, chúng tôi có các quy tắc xác thực khác nhau. Tất cả những gì chúng ta cần làm là gõ gợi ý yêu cầu trên phương thức điều khiển của bạn.

public function store(StoreBusiness $request) 
{ 
    // The incoming request is valid... 
} 

Đối với yêu cầu hình thức tùy chỉnh

class StoreBussiness extends FormRequest 
{ 

    public function rules() 
    { 
     $type = $this->route()->parameter('type'); 

     $rules = []; 
     if ($type === 'a') { 
     } 

     return rules; 
    } 
} 
0

Trong Laravel 5.5 tối thiểu (chưa kiểm tra các phiên bản cũ), một khi bạn đã làm rõ ràng ràng buộc (https://laravel.com/docs/5.5/routing#route-model-binding), bạn có thể nhận mô hình của bạn của bạn trực tiếp thông qua $ này:

class StoreBussiness extends FormRequest 
{ 

    public function rules() 
    { 
     $rules = []; 
     if ($this->type === 'a') { 
     } 

     return rules; 
    } 
} 
Các vấn đề liên quan