THẢO LUẬN

@vinhnguyen Trên trang tài liệu chính thống của mình, Laravel không hướng dẫn cách dùng phương thức này. Nhưng em đọc bài viết của anh https://viblo.asia/p/laravel-service-container-in-depth-tips-to-customize-your-application-RQqKLnqNl7z#_ioc--di-3 nên em mới biết về nó và cách sử dụng. Em hiểu các nguyên tắc mà anh đề cập. Em có nói "Laravel là framework em yêu thích nhất và thực tế nó vẫn hoạt động rất "ngon" với core như trên". Em chỉ tò mò một chút về lý do mà Laravel đã làm. Em thấy nó thật khó kiểm soát.

Ông Taylor bận lắm, không có thời gian giải thích mấy thắc mắc "vớ vẩn" của em đâu. 😐 Và vì Laravel vẫn chạy ngon đó thôi.

Em cảm ơn.

+2

@huukimit Tôi có một ví dụ như sau. Giả sử, tôi không thích dùng Illuminate\Foundation\Application mặc đinh của Laravel.

Tôi khai báo một class như sau.

// Chỉ implements interface \Illuminate\Contracts\Foundation\Application thôi nhé, không có rebinding.
class MyApplication implements \Illuminate\Contracts\Foundation\Application
{
      // code
}

Đây là constrcutor của ServiceProvider, chú ý biến app.

/**
     * Create a new service provider instance.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
public function __construct($app)
{
    $this->app = $app;
}

Tôi khởi tạo thế này:

$app = new MyApplication;

$provider = new \Illuminate\Auth\AuthServiceProvider($app);

$provider->register(); // chắc chắn sẽ báo lỗi "call to undefined method "
0

@huukimit Có lẽ do cách trình bày của tôi khó hiểu quá. 😐

Tôi nói lại nhé, phương thức rebinding chỉ tồn tại trên instance của Illuminate\Container\Container hoặc Illuminate\Foundation\Application. Nhưng trong bối cảnh của class ServiceContainer đặt ngoài "project Laravel". Bạn chú ý nhé, tôi nhấn mạnh vào việc "Đặt ngoài project Laravel". Nghĩa là nếu bạn nhìn vào một class ServiceContainer một cách riêng lẻ, chỉ có class này thôi, bạn sẽ thấy rằng app là một implementation của interface Illuminate\Contracts\Foundation\Application (nơi không có phương thức nào tên là rebinding cả). Bạn hiểu chứ?

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 6 14, 2018 4:16 SA

😃) cám ơn bạn, mình ko mua đâu ạ

0

@quynh001 À mình hiểu rồi, tức là bạn muốn hỏi rằng tại sao không đặt rebinding vào trong interface Container chứ không phải là Tại sao Laravel ServiceProvider gọi phương thức $this->app->rebinding() "không tồn tại"? Vì rõ ràng method này tồn tại mà 😄

0

@huukimit Cảm ơn phản hồi từ bạn. Như tôi đã nói, trong quá trình run-time, Laravel inject một instance của \Illuminate\Foundation\Application vào ServiceContainer nên tôi hiểu tại sao lại gọi được $this->app->rebinding() như vậy.

Tôi đã sửa lại tiêu đề để phù hợp hơn. Tôi sẽ cố gắng giải thích lại rõ hơn. ServiceContainer khai báo thuộc tính "app" là một implementation của Illuminate\Contracts\Foundation\Application (interface này không có phương thức rebinding). Như vậy, chỉ xét riêng trong bối cảnh class này, tôi nghĩ chỉ nên gọi những phương thức trên "app" mà đã được khai báo trong interface đó.

rebinding, refresh là đặc trưng riêng mà Laravel Container định nghĩa, những sự kiện này tôi thấy có thể áp dụng như resolving và afterResolving vậy. Do đó, việc bổ sung nó vào interface \Illuminate\Contracts\Container\Container là phù hợp theo quan điểm của tôi.

+2
thg 6 14, 2018 3:48 SA

ví dụ minh họa rất hay, cảm ơn bạn

+1
thg 6 14, 2018 3:37 SA

Bạn thực hành chút là hiểu ngay liền ấy mà 😄

0
thg 6 14, 2018 3:33 SA

hiểu chết liền .... ặc ặc. Có bài viết nào cơ bản hơn bài này không bạn. Tks bạn nhiều !

0
thg 6 14, 2018 2:08 SA

Tuyệt vời !!!

Bài viết rất hay và dễ hiểu. Xin cảm ơn.

0
thg 6 13, 2018 3:17 CH

ở ví dụ thứ 3 sao lại để message như này ạ message: {

}

+1
thg 6 13, 2018 9:56 SA

Hi ad,

Mình chỉ muốn report file A, B, C và ignore file X, Y, Z thì phải làm sao vậy

Thanks

0
thg 6 13, 2018 9:32 SA

@Lynk android.os.Process.killProcess(android.os.Process.myPid());

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 6 13, 2018 9:23 SA

em cũng đã thử nhưng không đc

0
thg 6 13, 2018 9:22 SA

@Lynk Bạn thử tham khảo thêm câu trả lời của anh Phạm Văn Doanh bên dưới xem giúp ích bạn được gì hơm?

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 6 13, 2018 9:21 SA

đã thử nhưng mà chỉ có màn hình nào nó có gọi notification thôi, còn màn hình không gọi như màn hình setting thì nó chỉ kill activity setting thôi

0
thg 6 13, 2018 8:45 SA

mình đang viết thành 1 series tìm hiểu vuejs nên bài đầu có lẽ hơi đơn giản, mong rằng những bài viết tiếp theo của mình trong series sẽ làm bạn hài lòng.

+1
thg 6 13, 2018 8:39 SA

Hay đó bạn ❤️

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí