成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel應(yīng)用

wums / 2219人閱讀

摘要:能看出來,是最高級(jí)的,一般推薦使用這個(gè)來處理隊(duì)列監(jiān)聽。注使用,當(dāng)更新代碼的時(shí)候,需要停止,然后重新啟動(dòng),這樣才能把修改的代碼應(yīng)用上。

CLI

參考:http://laravel-china.org/docs/5.1/artisan
cli處理業(yè)務(wù),把業(yè)務(wù)封裝成一個(gè)命令,用php artisan來調(diào)用
自定義的命令放在App/Console/Commands下
創(chuàng)建方式
php artisan make:console 命令名 —command=調(diào)用時(shí)名字
php artisan make:console SendEmails --command=emails:send
會(huì)在App/Console/Commands下生成SendEmails文件
命令生成以后,需要填寫該類的signature和description屬性,signature用來指定調(diào)用時(shí)的名字,desc是描述,這兩個(gè)屬性在調(diào)用list顯示命令的時(shí)候會(huì)被用到。
handle方法在命令執(zhí)行時(shí)被調(diào)用,可以將所有命令邏輯都放在這個(gè)方法里面,我們可以在命令控制器的構(gòu)造函數(shù)中注入任何依賴.

最后需要把命令注入到app/Console/Kernel.php文件中,否則這個(gè)命令artisan是找不到的

protected $commands = [
    "AppConsoleCommandsAnalyzeLog"
];
ip = $ip;
    }

    public function handle()
    {
        echo $this->ip->getName();
    }
}
調(diào)用:php artisan AnalyzeLog
事件

事件的原理就是 觀察者模式 的實(shí)現(xiàn);
新建一個(gè)事件類(被觀察者)
可以建立多個(gè)監(jiān)聽類(觀察者)
然后標(biāo)記觀察者和被觀察者的關(guān)系,當(dāng)被觀察者變化時(shí),通知觀察者
(在appprovicderseventServiceProviders中標(biāo)記事件類下的監(jiān)聽類)

建立事件類
php artisan make:event DelMsgEvent
會(huì)在appenents目錄下創(chuàng)建

data();
    }

建立監(jiān)聽者
在applisteners目錄下創(chuàng)建


建立事件和監(jiān)聽者的關(guā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 //搜索,根據(jù)msg字段中的women字段
    );
    $list = $this->collec->find($find);
    foreach($list as $document) //是個(gè)對(duì)象,需要迭代遍歷
    {
        var_dump($document);
    }
    //觸發(fā)事件
    Event::fire(new SomeEvent($list));
}
隊(duì)列

隊(duì)列任務(wù)可以放到redis中,redis的配置是config/databases.php里的
會(huì)把任務(wù)放到redis中的queues:default隊(duì)列中
把失敗的任務(wù)放到queues:default:reserved有序集合中
創(chuàng)建一個(gè)隊(duì)列任務(wù)

php artisan make:job SendReminderEmail

運(yùn)行成功后會(huì)在app/Jobs目錄下生成一個(gè)SendReminderEmail.php

class SendReminderEmail extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;
    public $name;
    //調(diào)用隊(duì)列時(shí),初始化的參數(shù)
    public function __construct($name)
    {
        $this->name = $name;
    }
    //隊(duì)列默認(rèn)執(zhí)行此方法
    public function handle()
    {
        Log::info("this is queue send to ".$this->name);
    }
    //隊(duì)列任務(wù)失敗執(zhí)行此方法
    public function failed()
    {
        Log::error("fail send to ".$this->name);
    }
}

插入隊(duì)列任務(wù),可以使用控制器中的DispatchesJobs trait(該trait在控制器基類Controller.php中引入)提供的dispatch方法手動(dòng)分發(fā)任務(wù)
當(dāng)然也可以在控制器之外的其它地方使用dispatch分發(fā)任務(wù),當(dāng)然在此之前需要在該類中使用use DispatchesJobs。

public function getShow()
{
    //生成一個(gè)隊(duì)列任務(wù),并傳入?yún)?shù)
    $this->dispatch(new SendReminderEmail(time()));
}

處理任務(wù)

Laravel為此提供了三種Artisan命令:

queue:work 默認(rèn)只執(zhí)行一次隊(duì)列請(qǐng)求, 當(dāng)請(qǐng)求執(zhí)行完成后就終止;

queue:listen 監(jiān)聽隊(duì)列請(qǐng)求,只要運(yùn)行著,就能一直接受請(qǐng)求,除非手動(dòng)終止;

queue:work --daemon 同 listen 一樣, 只要運(yùn)行著,就能一直接受請(qǐng)求,不一樣的地方是在這個(gè)運(yùn)行模式下,當(dāng)新的請(qǐng)求到來的時(shí)候,不重新加載整個(gè)框架,而是直接 fire 動(dòng)作。能看出來, queue:work --daemon 是最高級(jí)的,一般推薦使用這個(gè)來處理隊(duì)列監(jiān)聽。

注:使用 queue:work --daemon ,當(dāng)更新代碼的時(shí)候,需要停止,然后重新啟動(dòng),這樣才能把修改的代碼應(yīng)用上。

上述操作將隊(duì)列推送到默認(rèn)隊(duì)列,即配置文件中的default,當(dāng)然你還可以將任務(wù)推送到指定隊(duì)列:

public function sendReminderEmail(Request $request,$id){
    $user = AppUser::findOrFail($id);
    $job = (new SendReminderEmail($user))->onQueue("emails");
    $this->dispatch($job);
}

因?yàn)槟J(rèn)監(jiān)聽的 default 隊(duì)列,所以需要指定監(jiān)聽隊(duì)列
php artisan queue:listen --queue=syncOrder

除此之外,Laravel還支持延遲任務(wù)執(zhí)行時(shí)間,這里我們指定延遲1分鐘執(zhí)行任務(wù):

public function sendReminderEmail(Request $request,$id){
    $user = User::findOrFail($id);
    $job = (new SendReminderEmail($user))->delay(60);
    $this->dispatch($job);
}
日志

目前,Log門面支持八種日志級(jí)別(使用RFC 5424標(biāo)準(zhǔn)):

Log::emergency($error); //緊急狀況,比如系統(tǒng)掛掉 
Log::alert($error); //需要立即采取行動(dòng)的問題,比如數(shù)據(jù)庫異常等,這種狀況應(yīng)該通過短信提醒 
Log::critical($error); //嚴(yán)重問題,比如:應(yīng)用組件無效,意料之外的異常 Log::error($error); //運(yùn)行時(shí)錯(cuò)誤,不需要立即處理但需要被記錄和監(jiān)控 Log::warning($error); //警告但不是錯(cuò)誤,比如使用了被廢棄的API 
Log::notice($error); //普通但值得注意的事件 
Log::info($error); //感興趣的事件,比如登錄、退出 
Log::debug($error); //詳細(xì)的調(diào)試信息

下面我們就來分別演示下這幾種日志級(jí)別的日志記錄,我們將在TestController的log方法中進(jìn)行測(cè)試:

public function log(){
    Log::emergency("系統(tǒng)掛掉了");
    Log::alert("數(shù)據(jù)庫訪問異常");
    Log::critical("系統(tǒng)出現(xiàn)未知錯(cuò)誤");
    Log::error("指定變量不存在");
    Log::warning("該方法已經(jīng)被廢棄");
    Log::notice("用戶在異地登錄");
    Log::info("用戶xxx登錄成功");
    Log::debug("調(diào)試信息");
}
Contracts, ServiceContainer, ServiceProvider, Facades關(guān)系

Contracts 合同,契約,也就是接口,定義一些規(guī)則,每個(gè)實(shí)現(xiàn)此接口的都要實(shí)現(xiàn)里面的方法

ServiceContainer 實(shí)現(xiàn)Contracts,具體的邏輯實(shí)現(xiàn)

ServiceProvider ServiceContainer的服務(wù)提供者,返回ServiceContainer的實(shí)例化,供其他地方使用,可以把它加入到app/config的provider中,會(huì)被自動(dòng)注冊(cè)到容器中

Facades 簡化ServiceProvider的調(diào)用方式,而且可以靜態(tài)調(diào)用ServiceContainer中的方法

實(shí)現(xiàn)

Contracts接口可以寫或不寫,這里就不定義了
定義一個(gè)ServiceContainer,實(shí)現(xiàn)具體的功能

namespace AppHelper;
class MyFoo
{
    public function add($a, $b)
    {
        return $a+$b;
    }
}

定義一個(gè)ServiceProvider供其他地方使用ServiceContain

app->bind("myfoo", function(){
            return new MyFoo();
        });
    }
}

在app/config.php中的providers數(shù)組中加入ServiceProvider,讓系統(tǒng)自動(dòng)注冊(cè)

AppProvidersMyFooServiceProvider::class,

這時(shí)候就可以使用了,假設(shè)在控制器中使用

public function two($id=null)
{
    //從系統(tǒng)容器中獲取實(shí)例化對(duì)象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
}

這樣太麻煩,還需要用make來獲取對(duì)象,為了簡便,就可以使用門面功能,定義門面MyFooFacade

namespace AppFacades;
use IlluminateSupportFacadesFacade;

class MyFooFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        //這里返回的是ServiceProvider中注冊(cè)時(shí),定義的字符串
        return "myfoo";
    }
}

在控制器里就可以直接調(diào)用了

use AppFacadesMyFooFacade;
public function two($id=null)
{
    //從系統(tǒng)容器中獲取實(shí)例化對(duì)象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
    //使用門面
    echo MyFooFacade::add(4,5);
}

總的來說,自定義了一個(gè)類,為了方便在其他別處使用,便可以使用服務(wù)提供者和門面

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30312.html

相關(guān)文章

  • [譯] 使用 PHPStorm 開發(fā) Laravel 應(yīng)用

    摘要:很多程序員使用創(chuàng)建他們的應(yīng)用程序。是一個(gè)免費(fèi)開源的應(yīng)用程序框架。是的模板語言,對(duì)藝術(shù)家友好,這個(gè)程序員的命令行工具可以在中工作使用插件和幫助器我們可以進(jìn)一步擴(kuò)展對(duì)應(yīng)用的支持。 很多PHP程序員使用 [laravel] 創(chuàng)建他們的應(yīng)用程序。[laravel] 是一個(gè)免費(fèi)開源的PHP web應(yīng)用程序框架。它基于多個(gè)Symfony 組件,提供了一個(gè)開發(fā)框架,包括authentication,...

    buildupchao 評(píng)論0 收藏0
  • Laravel框架的體系結(jié)構(gòu)

    摘要:開發(fā)人員可以通過命令行工具生成和管理項(xiàng)目環(huán)境。附帶了一個(gè)名為的優(yōu)秀的命令行工具它提供了一些開發(fā)過程中有用的命令用,可以用來生成框架代碼和數(shù)據(jù)庫管理。這就是的目錄結(jié)構(gòu)發(fā)揮作用的地方。 Laravel被稱為全棧式框架,因?yàn)樗軌蛱幚韽木W(wǎng)絡(luò)服務(wù)到數(shù)據(jù)庫管理、HTML生成的一切事情,垂直集成的web開發(fā)環(huán)境給開發(fā)者提供了更好的體驗(yàn)。 開發(fā)人員可以通過命令行工具,生成和管理Laravel項(xiàng)目環(huán)...

    ACb0y 評(píng)論0 收藏0
  • 使用 Kubernetes 來部署你的 Laravel 程序

    摘要:有些人將其稱為容器編排平臺(tái),而并非唯一的此類平臺(tái)。但是在中,您可以快速擴(kuò)展出多個(gè)實(shí)例你看看使用擴(kuò)展你的網(wǎng)站是何其便捷。當(dāng)你指向群集的地址和節(jié)點(diǎn)的端口號(hào)時(shí),你就已經(jīng)可見瀏覽器中正在運(yùn)行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發(fā) PHP 應(yīng)用程序的...

    JowayYoung 評(píng)論0 收藏0
  • 人人必備的10個(gè) Laravel 4 擴(kuò)展包

    摘要:更多擴(kuò)展包中有豐富的擴(kuò)展包來幫你完成幾乎任何你想實(shí)現(xiàn)的功能。我們不能把所有的擴(kuò)展包都整理出來,然而,這里還是列出了一些很有用的。總之,你幾乎總是能夠找到一個(gè)擴(kuò)展包可以解決你當(dāng)前的問題。 Laravel 是一個(gè)非常流行且簡單易用的PHP框架,它提供了很多基礎(chǔ)的工具(如 RESTful 路由、內(nèi)置的ORM、模版等)使你能夠快速的創(chuàng)建應(yīng)用。這意味著你可以花費(fèi)更少的時(shí)間來建立應(yīng)用程序的模版,給...

    darkbug 評(píng)論0 收藏0
  • 使用Tinker來調(diào)試Laravel應(yīng)用程序的數(shù)據(jù)以及使用Tinker一些總結(jié)

    摘要:不過除了使用加密,還可以使用原文鏈接使用來調(diào)試應(yīng)用程序的數(shù)據(jù)以及使用一些總結(jié)參考資料參考資料使用來調(diào)試你的參考資料框架填充中文數(shù)據(jù)測(cè)試數(shù)據(jù) 使用Tinker來調(diào)試Laravel應(yīng)用程序的數(shù)據(jù)以及使用Tinker一些總結(jié) [toc] 今天我們將討論如何使用Laravel的一些鮮為人知的功能來快速讀取Laravel應(yīng)用程序中的數(shù)據(jù)。我們可以使用Laravel的手工內(nèi)置php artisan...

    simon_chen 評(píng)論0 收藏0
  • laravel5.5和laravel-admin 安裝小坑筆記

    摘要:通過安裝器首先,通過安裝安裝器確保在系統(tǒng)路徑中中對(duì)應(yīng)路徑是,對(duì)應(yīng)路徑是,其中表示當(dāng)前用戶家目錄,否則不能在命令行任意路徑下調(diào)用命令。安裝完成后,通過簡單的命令即可在當(dāng)前目錄下創(chuàng)建一個(gè)新的應(yīng)用,例如,將會(huì)創(chuàng)建一個(gè)名為的新應(yīng)用,且包含所有依賴。 配置laravel-admin 官方的教程還是沒問題的,但也遇到了一點(diǎn)點(diǎn)小小坑,再次做個(gè)記錄吧 安裝 LaravelLaravel 使用 Comp...

    xiongzenghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<