摘要:能看出來,是最高級的,一般推薦使用這個來處理隊列監(jiān)聽。注使用,當更新代碼的時候,需要停止,然后重新啟動,這樣才能把修改的代碼應用上。
CLI
參考:http://laravel-china.org/docs/5.1/artisan
cli處理業(yè)務,把業(yè)務封裝成一個命令,用php artisan來調用
自定義的命令放在App/Console/Commands下
創(chuàng)建方式
php artisan make:console 命令名 —command=調用時名字
php artisan make:console SendEmails --command=emails:send
會在App/Console/Commands下生成SendEmails文件
命令生成以后,需要填寫該類的signature和description屬性,signature用來指定調用時的名字,desc是描述,這兩個屬性在調用list顯示命令的時候會被用到。
handle方法在命令執(zhí)行時被調用,可以將所有命令邏輯都放在這個方法里面,我們可以在命令控制器的構造函數中注入任何依賴.
最后需要把命令注入到app/Console/Kernel.php文件中,否則這個命令artisan是找不到的
protected $commands = [ "AppConsoleCommandsAnalyzeLog" ];
ip = $ip; } public function handle() { echo $this->ip->getName(); } }
調用:php artisan AnalyzeLog事件
事件的原理就是 觀察者模式 的實現;
新建一個事件類(被觀察者)
可以建立多個監(jiān)聽類(觀察者)
然后標記觀察者和被觀察者的關系,當被觀察者變化時,通知觀察者
(在appprovicderseventServiceProviders中標記事件類下的監(jiān)聽類)
建立事件類
php artisan make:event DelMsgEvent
會在appenents目錄下創(chuàng)建
data(); }
建立監(jiān)聽者
在applisteners目錄下創(chuàng)建
建立事件和監(jiān)聽者的關系
在appprovidersEventServiceProviders.php中的protected $listen = [ //事件 "AppEventsSomeEvent" => [ //事件的監(jiān)聽者 "AppListenersEventListener", "AppListenersSomeEventListener", ], ];在控制器中觸發(fā)事件
//Event事件的支持,Event::fire所在的類 use IlluminateSupportFacadesEvent; //要用到的事件 use AppEventsSomeEvent; public function getShow() { $find = array( "uid" => 55, "msg.women" => false //搜索,根據msg字段中的women字段 ); $list = $this->collec->find($find); foreach($list as $document) //是個對象,需要迭代遍歷 { var_dump($document); } //觸發(fā)事件 Event::fire(new SomeEvent($list)); }隊列隊列任務可以放到redis中,redis的配置是config/databases.php里的
會把任務放到redis中的queues:default隊列中
把失敗的任務放到queues:default:reserved有序集合中
創(chuàng)建一個隊列任務php artisan make:job SendReminderEmail運行成功后會在app/Jobs目錄下生成一個SendReminderEmail.php
class SendReminderEmail extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; public $name; //調用隊列時,初始化的參數 public function __construct($name) { $this->name = $name; } //隊列默認執(zhí)行此方法 public function handle() { Log::info("this is queue send to ".$this->name); } //隊列任務失敗執(zhí)行此方法 public function failed() { Log::error("fail send to ".$this->name); } }插入隊列任務,可以使用控制器中的DispatchesJobs trait(該trait在控制器基類Controller.php中引入)提供的dispatch方法手動分發(fā)任務
當然也可以在控制器之外的其它地方使用dispatch分發(fā)任務,當然在此之前需要在該類中使用use DispatchesJobs。public function getShow() { //生成一個隊列任務,并傳入參數 $this->dispatch(new SendReminderEmail(time())); }處理任務
Laravel為此提供了三種Artisan命令:
queue:work 默認只執(zhí)行一次隊列請求, 當請求執(zhí)行完成后就終止;
queue:listen 監(jiān)聽隊列請求,只要運行著,就能一直接受請求,除非手動終止;
queue:work --daemon 同 listen 一樣, 只要運行著,就能一直接受請求,不一樣的地方是在這個運行模式下,當新的請求到來的時候,不重新加載整個框架,而是直接 fire 動作。能看出來, queue:work --daemon 是最高級的,一般推薦使用這個來處理隊列監(jiān)聽。
注:使用 queue:work --daemon ,當更新代碼的時候,需要停止,然后重新啟動,這樣才能把修改的代碼應用上。
上述操作將隊列推送到默認隊列,即配置文件中的default,當然你還可以將任務推送到指定隊列:
public function sendReminderEmail(Request $request,$id){ $user = AppUser::findOrFail($id); $job = (new SendReminderEmail($user))->onQueue("emails"); $this->dispatch($job); }因為默認監(jiān)聽的 default 隊列,所以需要指定監(jiān)聽隊列
php artisan queue:listen --queue=syncOrder除此之外,Laravel還支持延遲任務執(zhí)行時間,這里我們指定延遲1分鐘執(zhí)行任務:
public function sendReminderEmail(Request $request,$id){ $user = User::findOrFail($id); $job = (new SendReminderEmail($user))->delay(60); $this->dispatch($job); }日志目前,Log門面支持八種日志級別(使用RFC 5424標準):
Log::emergency($error); //緊急狀況,比如系統(tǒng)掛掉 Log::alert($error); //需要立即采取行動的問題,比如數據庫異常等,這種狀況應該通過短信提醒 Log::critical($error); //嚴重問題,比如:應用組件無效,意料之外的異常 Log::error($error); //運行時錯誤,不需要立即處理但需要被記錄和監(jiān)控 Log::warning($error); //警告但不是錯誤,比如使用了被廢棄的API Log::notice($error); //普通但值得注意的事件 Log::info($error); //感興趣的事件,比如登錄、退出 Log::debug($error); //詳細的調試信息下面我們就來分別演示下這幾種日志級別的日志記錄,我們將在TestController的log方法中進行測試:
public function log(){ Log::emergency("系統(tǒng)掛掉了"); Log::alert("數據庫訪問異常"); Log::critical("系統(tǒng)出現未知錯誤"); Log::error("指定變量不存在"); Log::warning("該方法已經被廢棄"); Log::notice("用戶在異地登錄"); Log::info("用戶xxx登錄成功"); Log::debug("調試信息"); }Contracts, ServiceContainer, ServiceProvider, Facades關系Contracts 合同,契約,也就是接口,定義一些規(guī)則,每個實現此接口的都要實現里面的方法
ServiceContainer 實現Contracts,具體的邏輯實現
ServiceProvider ServiceContainer的服務提供者,返回ServiceContainer的實例化,供其他地方使用,可以把它加入到app/config的provider中,會被自動注冊到容器中
Facades 簡化ServiceProvider的調用方式,而且可以靜態(tài)調用ServiceContainer中的方法
實現
Contracts接口可以寫或不寫,這里就不定義了
定義一個ServiceContainer,實現具體的功能namespace AppHelper; class MyFoo { public function add($a, $b) { return $a+$b; } }定義一個ServiceProvider供其他地方使用ServiceContain
app->bind("myfoo", function(){ return new MyFoo(); }); } }在app/config.php中的providers數組中加入ServiceProvider,讓系統(tǒng)自動注冊
AppProvidersMyFooServiceProvider::class,這時候就可以使用了,假設在控制器中使用
public function two($id=null) { //從系統(tǒng)容器中獲取實例化對象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); }這樣太麻煩,還需要用make來獲取對象,為了簡便,就可以使用門面功能,定義門面MyFooFacade
namespace AppFacades; use IlluminateSupportFacadesFacade; class MyFooFacade extends Facade { protected static function getFacadeAccessor() { //這里返回的是ServiceProvider中注冊時,定義的字符串 return "myfoo"; } }在控制器里就可以直接調用了
use AppFacadesMyFooFacade; public function two($id=null) { //從系統(tǒng)容器中獲取實例化對象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用門面 echo MyFooFacade::add(4,5); }總的來說,自定義了一個類,為了方便在其他別處使用,便可以使用服務提供者和門面
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30312.html
摘要:很多程序員使用創(chuàng)建他們的應用程序。是一個免費開源的應用程序框架。是的模板語言,對藝術家友好,這個程序員的命令行工具可以在中工作使用插件和幫助器我們可以進一步擴展對應用的支持。 很多PHP程序員使用 [laravel] 創(chuàng)建他們的應用程序。[laravel] 是一個免費開源的PHP web應用程序框架。它基于多個Symfony 組件,提供了一個開發(fā)框架,包括authentication,...
摘要:開發(fā)人員可以通過命令行工具生成和管理項目環(huán)境。附帶了一個名為的優(yōu)秀的命令行工具它提供了一些開發(fā)過程中有用的命令用,可以用來生成框架代碼和數據庫管理。這就是的目錄結構發(fā)揮作用的地方。 Laravel被稱為全棧式框架,因為它能夠處理從網絡服務到數據庫管理、HTML生成的一切事情,垂直集成的web開發(fā)環(huán)境給開發(fā)者提供了更好的體驗。 開發(fā)人員可以通過命令行工具,生成和管理Laravel項目環(huán)...
摘要:有些人將其稱為容器編排平臺,而并非唯一的此類平臺。但是在中,您可以快速擴展出多個實例你看看使用擴展你的網站是何其便捷。當你指向群集的地址和節(jié)點的端口號時,你就已經可見瀏覽器中正在運行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發(fā) PHP 應用程序的...
摘要:更多擴展包中有豐富的擴展包來幫你完成幾乎任何你想實現的功能。我們不能把所有的擴展包都整理出來,然而,這里還是列出了一些很有用的。總之,你幾乎總是能夠找到一個擴展包可以解決你當前的問題。 Laravel 是一個非常流行且簡單易用的PHP框架,它提供了很多基礎的工具(如 RESTful 路由、內置的ORM、模版等)使你能夠快速的創(chuàng)建應用。這意味著你可以花費更少的時間來建立應用程序的模版,給...
摘要:不過除了使用加密,還可以使用原文鏈接使用來調試應用程序的數據以及使用一些總結參考資料參考資料使用來調試你的參考資料框架填充中文數據測試數據 使用Tinker來調試Laravel應用程序的數據以及使用Tinker一些總結 [toc] 今天我們將討論如何使用Laravel的一些鮮為人知的功能來快速讀取Laravel應用程序中的數據。我們可以使用Laravel的手工內置php artisan...
摘要:通過安裝器首先,通過安裝安裝器確保在系統(tǒng)路徑中中對應路徑是,對應路徑是,其中表示當前用戶家目錄,否則不能在命令行任意路徑下調用命令。安裝完成后,通過簡單的命令即可在當前目錄下創(chuàng)建一個新的應用,例如,將會創(chuàng)建一個名為的新應用,且包含所有依賴。 配置laravel-admin 官方的教程還是沒問題的,但也遇到了一點點小小坑,再次做個記錄吧 安裝 LaravelLaravel 使用 Comp...
閱讀 2810·2021-10-26 09:48
閱讀 1673·2021-09-22 15:22
閱讀 4032·2021-09-22 15:05
閱讀 611·2021-09-06 15:02
閱讀 2608·2019-08-30 15:52
閱讀 2108·2019-08-29 18:38
閱讀 2755·2019-08-28 18:05
閱讀 2333·2019-08-26 13:55