Mình chỉ dùng phương thức cycle trong ví dụ thôi ạ, hai phương thức before và after em thêm vào để minh họa thôi ạ cycle dùng cho một nhóm events khác nhau, còn before vs after dùng cho hai event tương ứng trước và sau khi upload file ạ.
Nó chỉ có nhiệm vụ format tên của phương thức mình sẽ gọi thôi ạ. Ví dụ mình có một driver (handler) vs tên là audio-graph thì tên phương thức sẽ là addAudioGraphHandler.
Em cũng chưa dám chắc là ok ạ, em chưa thử. Nhưng các event listeners sẽ được gọi thông qua các handler class chứ không đăng ký trực tiếp cho hai event là UploadProcessing và UploadProcessed, nên nếu dùng event subscriber em nghĩ sẽ có vấn đề.
Thay vì nhét recycler view con vào viewholder của recycler view cha, bạn có mảng data con r thì thực hiện add vào view có sẵn xem (LinearLayout với orientation vertical). Trc mình làm thử, việc tạo adapter trong view holder con có làm view bị khựng lại mỗi khi scroll thật nhưng k hiểu rõ nguyên nhân. Add View bt thì mình thấy mượt hơn chút
nên làm một 1 ví dụ cho cả 2 cách dùng callback bị callback hell và promise. từ đó người ta mới dễ hình dung ra tại sao lại dùng promise và nó hơn callback ở chỗ nào. 😦
nên làm một 1 ví dụ cho cả 2 cách dùng callback bị callback hell và promise. từ đó người ta mới dễ hình dung ra tại sao lại dùng promise và nó hơn callback ở chỗ nào. 😦
@thaihuy Bạn config rồi nó thông báo lỗi như thế nào vậy? Mình thấy document họ ghi đầy đủ và chi tiết mà:
Install
composer require yajra/laravel-oci8
Config
Thêm OCI8 provider cho laravel tại config/app.php:
'providers' => [
// ...
Yajra\Oci8\Oci8ServiceProvider::class, // Thêm dòng này vào mảng providers
],
Tùy chỉnh config nâng cao thêm, một file cấu hình cụ thể sẽ xuất hiện thêm trong thư mục config để bạn cấu hình thêm các thông số khác:
php artisan vendor:publish --tag=oracle
Sử dụng
Thay vì dùng Model mặc định của laravel, bạn dùng Yajra\Oci8\Eloquent\OracleEloquent để thay thế:
use Yajra\Oci8\Eloquent\OracleEloquent as Eloquent;
class Student extends Eloquent {
// define binary/blob fields
protected $binaries = ['content'];
// define the sequence name used for incrementing
// default value would be {table}_{primaryKey}_seq if not set
protected $sequence = null;
}
Bạn thử config lại với các bước như trên xem có được ko nhé!
Bạn có thể cụ thể hơn giúp mình được không bạn? vì mình đã cài laravel-oci8 rồi mà vẫn không kết nối được, bạn có thể hướng dẫn chi tiết hơn giúp mình không? (có thể select 1 table trên database luôn giúp nhé). Cảm ơn bạn nhiều!
Không bao giờ quá già để học hỏi. Rất khâm phục anh Sam đã có một chiến lược đúng đắn. Đặc biệt là khi anh ấy "đi du lịch" và vẫn học tập, đọc sách. Mình từng gặp nhiều người phương Tây, luôn đọc sách trên tàu, hoặc máy bay, hoặc quán cafe ở khu du lịch, bờ biển. Họ luôn đi du lịch và không ngừng tìm cơ hội cho mình. Tư duy phương Đông và phương Tây có sự khác nhau ở chỗ "Làm việc để đi du lịch" và "Vừa đi du lịch vừa làm việc". Một bài dịch xuất sắc. Cảm ơn bạn!
Lâu rồi ko code Laravel nhưng mà anh có mấy câu hỏi
Ở trong UploadManager.php anh thấy có method before/after/cycle nhưng trong UploadServiceProvider chỉ thấy gọi tới cycle vậy cái before/after có cần ko em nhỉ ?
Hay là cái cycle chỉ để liệt kê toàn bộ event ra, còn muốn Framework xác định xem Class nào thuộc before, Class nào thuộc after mình phải bổ sung vào từng method đó ?
Trong function registerHandlers($manager) có dòng $this->{'add'.Str::studly($key).'Handler'}($manager, $key); ➡︎ Lý do dùng studly-case cap là gì thế em ?
Ở đây nếu dùng Event Subscribers thì có thể bỏ đi 5 method dưới trong app/Providers/UploadServiceProvider.php ko?
public function boot()
{
$this->app->make('upload')->cycle(function ($event) {
$this->callListeners($event);
});
}
protected function callListeners($event)
{
...
}
protected function getHandlerClass($event)
{
...
}
protected function makeListener($listener, $event)
{
...
}
protected function callListener($listener, $event)
{
...
}
Đại loại là ta create UploadEventSubscriber::class gồm 2 method onUploading($event) > UploadProcessing::class và onUploaded($event) > UploadProcessed::class. Sau đó gọi $event->context['handler']->preprocess hoặc $event->context['handler']->postprocess trong method tương ứng.
Ps: Bài viết hại não quá, chưa 1 lần xài Manager :sad:
PHPUnit is the best tool for PHP Unit testing. It is really easy to install and write a test case using this tool. All you have to do is to create set the directory structure, create phpunit.xml file, add testsuite in it and write your test case.
THẢO LUẬN
before
vàafter
có thể dùng để lưu log trước và sau khi upload ví dụ thôi ạUploadServiceProvider
class em nghĩ sẽ có nhiều cách để viết ngắn gọn hơnMình chỉ dùng phương thức
cycle
trong ví dụ thôi ạ, hai phương thứcbefore
vàafter
em thêm vào để minh họa thôi ạcycle
dùng cho một nhóm events khác nhau, cònbefore
vsafter
dùng cho hai event tương ứng trước và sau khi upload file ạ.Nó chỉ có nhiệm vụ format tên của phương thức mình sẽ gọi thôi ạ. Ví dụ mình có một driver (handler) vs tên là audio-graph thì tên phương thức sẽ là
addAudioGraphHandler
.Em cũng chưa dám chắc là ok ạ, em chưa thử. Nhưng các event listeners sẽ được gọi thông qua các handler class chứ không đăng ký trực tiếp cho hai event là
UploadProcessing
vàUploadProcessed
, nên nếu dùng event subscriber em nghĩ sẽ có vấn đề.khủng quá cơ. vậy mà khi xưa bảo fix bug CSS cho Skyrec thì toàn né tránh )
đã VueJS rồi, các đại ca bh update công nghệ nhanh quá =))
Hoá ra muốn X2 lương chỉ cần đi du lịch Đông Nam Á =))
Thay vì nhét recycler view con vào viewholder của recycler view cha, bạn có mảng data con r thì thực hiện add vào view có sẵn xem (LinearLayout với orientation vertical). Trc mình làm thử, việc tạo adapter trong view holder con có làm view bị khựng lại mỗi khi scroll thật nhưng k hiểu rõ nguyên nhân. Add View bt thì mình thấy mượt hơn chút
nên làm một 1 ví dụ cho cả 2 cách dùng callback bị callback hell và promise. từ đó người ta mới dễ hình dung ra tại sao lại dùng promise và nó hơn callback ở chỗ nào. 😦
nên làm một 1 ví dụ cho cả 2 cách dùng callback bị callback hell và promise. từ đó người ta mới dễ hình dung ra tại sao lại dùng promise và nó hơn callback ở chỗ nào. 😦
pwa
@thaihuy Bạn config rồi nó thông báo lỗi như thế nào vậy? Mình thấy document họ ghi đầy đủ và chi tiết mà:
Install
Config
Thêm OCI8 provider cho laravel tại
config/app.php
:Tùy chỉnh config nâng cao thêm, một file cấu hình cụ thể sẽ xuất hiện thêm trong thư mục config để bạn cấu hình thêm các thông số khác:
Sử dụng
Thay vì dùng Model mặc định của laravel, bạn dùng
Yajra\Oci8\Eloquent\OracleEloquent
để thay thế:Bạn thử config lại với các bước như trên xem có được ko nhé!
@Thor_Pham bài viết hay và dễ hiểu. em có một vài góp ý hi vọng có thể giúp chị cải thiện thêm hiệu năng của model:
Em chúc chị có những bài viết Viblo thú vị hơn nữa
Bạn có thể cụ thể hơn giúp mình được không bạn? vì mình đã cài laravel-oci8 rồi mà vẫn không kết nối được, bạn có thể hướng dẫn chi tiết hơn giúp mình không? (có thể select 1 table trên database luôn giúp nhé). Cảm ơn bạn nhiều!
Không bao giờ quá già để học hỏi. Rất khâm phục anh Sam đã có một chiến lược đúng đắn. Đặc biệt là khi anh ấy "đi du lịch" và vẫn học tập, đọc sách. Mình từng gặp nhiều người phương Tây, luôn đọc sách trên tàu, hoặc máy bay, hoặc quán cafe ở khu du lịch, bờ biển. Họ luôn đi du lịch và không ngừng tìm cơ hội cho mình. Tư duy phương Đông và phương Tây có sự khác nhau ở chỗ "Làm việc để đi du lịch" và "Vừa đi du lịch vừa làm việc". Một bài dịch xuất sắc. Cảm ơn bạn!
tôi đã thử và mất 1 đống tiền mua khóa học online như thế nào
lương ông x2 nữa thì công ty phá sản à
tôi đã học được cách giật tít câu view như thế nào (phanno)
Lâu rồi ko code Laravel nhưng mà anh có mấy câu hỏi
UploadManager.php
anh thấy có methodbefore/after/cycle
nhưng trongUploadServiceProvider
chỉ thấy gọi tớicycle
vậy cáibefore/after
có cần ko em nhỉ ? Hay là cáicycle
chỉ để liệt kê toàn bộ event ra, còn muốn Framework xác định xem Class nào thuộcbefore
, Class nào thuộcafter
mình phải bổ sung vào từng method đó ?Thứ tự class trong array trên có quan trọng ko ?
Trong function
registerHandlers($manager)
có dòng$this->{'add'.Str::studly($key).'Handler'}($manager, $key);
➡︎ Lý do dùng studly-case cap là gì thế em ?Ở đây nếu dùng Event Subscribers thì có thể bỏ đi 5 method dưới trong
app/Providers/UploadServiceProvider.php
ko?Đại loại là ta create
UploadEventSubscriber::class
gồm 2 methodonUploading($event)
>UploadProcessing::class
vàonUploaded($event)
>UploadProcessed::class
. Sau đó gọi$event->context['handler']->preprocess
hoặc$event->context['handler']->postprocess
trong method tương ứng.Ps: Bài viết hại não quá, chưa 1 lần xài Manager :sad:
PHPUnit is the best tool for PHP Unit testing. It is really easy to install and write a test case using this tool. All you have to do is to create set the directory structure, create phpunit.xml file, add testsuite in it and write your test case.
Bài viết rất hữu ích. Nếu bạn bổ sung thêm source code trên github thì (ngon). Mình muốn dùng tool này vào app của mình, đỡ phải cột lại =))