2015-03-16 26 views
11

Câu hỏi khá đơn giản - có thể mở rộng chức năng Laravel 5 theo bất kỳ cách thông minh nào hay bạn cần sao chép đôi khi rất nhiều mã/lớp để đạt được những gì bạn muốn.Mở rộng chức năng lõi Laravel 5

Vì nó khá rộng, tôi sẽ cung cấp cho bạn 2 ví dụ.

1) Tôi muốn thay đổi url cho editcreate cho \Illuminate\Routing\ResourceRegistrar. Hiện tại, cách duy nhất tôi tìm thấy để đạt được điều đó là: mở rộng chính Illuminate Application để vượt qua số RoutingServiceProvider của riêng mình, sau đó mở rộng Router, sau đó mở rộng Illuminate\Routing\ResourceRegistrar và cuối cùng là sử dụng lớp Ứng dụng mở rộng của chúng tôi. Khá nhiều sửa đổi chỉ để thay đổi 2 dòng. Nhiều phương pháp được trên thực tế nhân đôi chỉ để vượt qua lớp tùy chỉnh của chúng tôi đó là mã chính xác như nhau ngoại trừ nó sử dụng lớp từ namespace khác

2) thay đổi tương tự khác - thiết lập đường dẫn tùy chỉnh cho cấu hình được lưu trữ - bạn cần phải một lần nữa mở rộng Application để ghi đè phương pháp getCachedConfigPath và sau đó thực hiện thay đổi trong bootstrap/app.php

Vì vậy, câu hỏi là - đó là cách mà một số sửa đổi cần phải thực hiện hoặc có thể giống nhau (ví dụ: 2 ở trên) có thể đạt được bằng cách nào đó không mở rộng lõi Application lớp và thực hiện rất nhiều thay đổi?

+0

Tôi nghĩ nếu bạn muốn tùy chỉnh/mở rộng Laravel thì Laravel có thể không phải là khung công tác của bạn hoặc có thể là một tính năng mới hoặc sửa chữa mà Laravel cần. Bạn đã cân nhắc xây dựng bootstrap của riêng mình với các gói của Laravel và Symfony chưa? – astroanu

+0

Tôi kính trọng không đồng ý với @astroanu - Tôi không nghĩ rằng muốn tinh chỉnh một vài điều ở đây và có lý do đủ để vứt bỏ toàn bộ khuôn khổ và tất cả những thứ khác nó mang lại cho bạn. Không có khuôn khổ nào có thể là tất cả mọi thứ cho tất cả mọi người, vì vậy tôi nghĩ hoàn toàn có thể thực hiện một số thay đổi ở đây và ở đó khi cần thiết. Chỉ cần chắc chắn rằng bạn đang làm rõ tài liệu cho họ để một nhà phát triển tương lai quen thuộc với Laravel "out-of-the-box" có thể hiểu được nơi bạn đã khác với tiêu chuẩn. –

+0

@JordanLev đọc nhận xét của tôi và lưu ý "nếu bạn muốn tùy chỉnh/mở rộng Laravel R muchNG" – astroanu

Trả lời

6

Bạn sẽ có thể ghi đè lên lõi ResourceRegistrar bằng cách liên kết thực hiện của riêng bạn để container dịch vụ:

$this->app->bind('\Illuminate\Routing\ResourceRegistrar', function() 
{ 
    return new MyResourceRegistrar(); 
}); 

Hãy MyResourceRegistrar mở rộng lõi ResourceRegistrar và bạn sẽ có thể ghi đè lên editcreate phương pháp:

class MyResourceRegistrar extends \Illuminate\Routing\ResourceRegistrar 
{ 
    // Overwrite your methods here 
} 
Các vấn đề liên quan