Em nghĩ cần thêm skip_before_action :require_login, only: [:new, :create] ở cả UsersController nữa. Nếu không thì khi sử dụng button Register ở trang login sẽ không thể chuyển sang trang Register được?
Xin chào,
Hiện tại em làm đến bước tạo sitemap "php artisan sitemap:create" thì bị lỗi "There are no commands defined in the "sitemap" namespace" làm sao để khắc phục ạ?.
Không nên nói class kế thừa interface. Em nên dùng nguyên từ tiếng anh là implements thì hay hơn. Kế thừa chỉ nên dùng cho class mà thôi
Ngoài ra, khi nói về Abtract Class với Interface, người ta hay có một ví von nữa là: khi extend một abtract class, thì có nghĩa là ta đang thể hiện mối quan hệ is-a (là), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (có, hay thực hiện).
Ngày trước code còn hay có convention thêm tiền tố I ở trước tên Interface để thể hiện đó là một Interface, nhưng anh thấy gần đây họ cũng bỏ nhiều rồi, không rõ trong CSharp vẫn giữ quan điểm đó hay sao Mọi người thường đặt tên Interface sao cho có thể thể hiện đúng bản chất của nó theo mối quan hệ đã thể hiện hơn trên.
Programmer là Human, thực hiện việc Programming, Debugging
P/S: Một câu hỏi nhỏ: một class có thể implements được nhiều Interface, vậy theo em nếu trong 2 Interface mà cùng được class A implements, có cùng một function tên là a() thì sao nhỉ?
An inherited member from a base class is overridden by a member inserted by a Trait. The precedence order is that members from the current class override Trait methods, which in turn override inherited methods.
=> Thứ tự ưu tiên sẽ là: method của class hiện tại > (override) method của Trait > method từ class cha
Bạn có thể hình dung là khi class sử dụng 1 trait thì khi chạy, PHP sẽ copy nội dung của trait vào class, nếu có 2 method trùng tên thì nó sẽ giữ lại method của class và không copy method đó của trait vào nữa. Trường hợp không có method nào trùng tên thì PHP sẽ copy tất cả nội dung của trait vào, trở thành một phần của class và tất nhiên nó sẽ override lại các method của lớp cha.
@buihieubthc2rb Em nghĩ không ai overide trong Trait cả. Việc sinh ra thằng Trait để tránh kế thừa phức tạp nhiều tầng lớp trong những ngôn ngữ đơn kế thừa (như PHP) thôi.
THẢO LUẬN
@pht cấm ko cho cmt dài h =))
Em nghĩ cần thêm skip_before_action :require_login, only: [:new, :create] ở cả UsersController nữa. Nếu không thì khi sử dụng button Register ở trang login sẽ không thể chuyển sang trang Register được?
Xin chào, Hiện tại em làm đến bước tạo sitemap "php artisan sitemap:create" thì bị lỗi "There are no commands defined in the "sitemap" namespace" làm sao để khắc phục ạ?.
Bài viết rất hay và chi tiết
Anh có vài góp ý nhỏ cho em, hy vọng có thể giúp em nâng cao chất lượng bài viết hơn
Cái này em nên nói rõ là với ngôn ngữ em đang sử dụng trong bài viết, là
csharp
, hay có thể làPHP
nữa. Còn vớiJava
thì khá là dị, theo anh được biết thì từ Java 8, trong Interface người ta cũng có thể khai báo function body =)) https://viblo.asia/p/interface-trong-java-8-gioi-thieu-default-method-va-static-method-PDOkqLqjejxKhông nên nói class kế thừa interface. Em nên dùng nguyên từ tiếng anh là
implements
thì hay hơn. Kế thừa chỉ nên dùng choclass
mà thôiNgoài ra, khi nói về Abtract Class với Interface, người ta hay có một ví von nữa là: khi
extend
mộtabtract class
, thì có nghĩa là ta đang thể hiện mối quan hệis-a
(là), còn khiimplement
mộtinterface
, thì ta đang thể hiện mối quan hệhas-a
(có, hay thực hiện).Ngày trước code còn hay có convention thêm tiền tố
I
ở trước tênInterface
để thể hiện đó là mộtInterface
, nhưng anh thấy gần đây họ cũng bỏ nhiều rồi, không rõ trong CSharp vẫn giữ quan điểm đó hay sao Mọi người thường đặt tênInterface
sao cho có thể thể hiện đúng bản chất của nó theo mối quan hệ đã thể hiện hơn trên.Ví dụ như
chẳng hạn. Đọc sẽ hiểu là
P/S: Một câu hỏi nhỏ: một class có thể
implements
được nhiềuInterface
, vậy theo em nếu trong 2Interface
mà cùng được classA
implements, có cùng một function tên làa()
thì sao nhỉ?Tai sao zsh cua em no co tieng Trung Quoc vay? Em mac phai van de nua la command gedit ~/.zshrc no khong chay duoc
rất chi tiết, thank bạn
https://carbon.now.sh
bạn dùng ide gì để code mà đẹp vậy
nice
PHP docs: https://secure.php.net/manual/en/language.oop5.traits.php#language.oop5.traits.precedence
=> Thứ tự ưu tiên sẽ là: method của class hiện tại > (override) method của Trait > method từ class cha
Bạn có thể hình dung là khi class sử dụng 1 trait thì khi chạy, PHP sẽ copy nội dung của trait vào class, nếu có 2 method trùng tên thì nó sẽ giữ lại method của class và không copy method đó của trait vào nữa. Trường hợp không có method nào trùng tên thì PHP sẽ copy tất cả nội dung của trait vào, trở thành một phần của class và tất nhiên nó sẽ override lại các method của lớp cha.
hay
không dịch à b
Hình như việc ảnh hưởng SEO ko còn nữa do đã được render ra html trước khi trả về client rồi thì phải
updated bạn nhé
chị chăm quá
Bạn nên ghi rõ nguồn luôn nhé: https://scotch.io/tutorials/build-custom-pagination-with-react
Vậy làm sao để xóa
Hay quá, cảm ơn bạn nhiều
@huusu1996 thì ý là nó vẫn cho override thôi, kiểu cố để sửa thì ai quản lý được đâu em (khoc)
@buihieubthc2rb Em nghĩ không ai overide trong Trait cả. Việc sinh ra thằng Trait để tránh kế thừa phức tạp nhiều tầng lớp trong những ngôn ngữ đơn kế thừa (như PHP) thôi.