1. 程式人生 > >laravel日常使用總結

laravel日常使用總結

laravel日常使用總結

一、redis 執行服務時報錯:

Creating Server TCP listening socket *:6379: bind: No such file or directory

解決方法,依次輸入以下命令

1. redis-cli.exe

2. Shutdown

3. Exit

4. redis-server.exe

 

二、路由routes.php的設定

Routes.php是可以更改的,設定的位置是App->Providers->RputeServiceProvider.php

 

 

三、中介軟體可以自定義

App->Http->Kernel.php中,是設定的中介軟體,這個是可以自定義的,

Middleware中新增中介軟體Cors.php,在Kernel.php中可以增加 

  



Mui是我自定義的一箇中間件組名字;執行Kernel類的handle方法,主要動作是執行middleware和啟動URL相關的Contrller

 

在手機端訪問的時候,就會載入mui的中介軟體組;

 

四、去掉POST提交驗證

 

 

VerifyCsrfToken中,可以設定不需要驗證(即{!! csrf_field() !!})的路由名,

 

這樣所有mui/*的路由,對post提交都沒有驗證,也可以在Kernel.php中介軟體組中去掉\App\Http\Middleware\VerifyCsrfToken::class,

 

、新增和修改可以用一個頁面

 

判斷下物件是否存在就可以,

 

這裡面{{ method_field('PATCH') }}  {{ csrf_field() }} 是用於PATCH提交的,瀏覽器不識別PATCH PUT DELETE

這些提交方式,只識別GET POST

 

六、Datatables的使用

Laravel可以使用datatables,以下是我使用datatables的流程及問題;

1.安裝
cmd中打出

composer require yajra/laravel-datatables-oracle:~5.0

即可使用composer安裝datatables

config/app.php中新增:

yajra\Datatables\DatatablesServiceProvider::class,

'Datatables' => yajra\Datatables\Datatables::class,

生成配置檔案: 

php artisan vendor:publish

這樣子就安裝完了

詳情參考:

http://blog.csdn.net/hooloo/article/details/50415949

2.使用
1、引入:

在所需的controller中引入use Datatables;

app.blade.php介面中引入jquery.dataTables.jsjquery.dataTables.css

 

引入在href="{{ URL::asset('地址') }}"

地址是放在public資料夾下的檔案

 

2、Controller端

Controller端放置一個跳轉頁面:

 

一個datatables查詢頁面:

 

laravel自己查詢一樣,只不過不需要在結尾新增->get()->frist()等方法;

直接Datatables::of($result)->make(true);即可;

Datatables還有一些相關方法,可以參考:https://packagist.org/packages/yajra/laravel-datatables-oracle

 

3、前端頁面

其他欄位都差不多

 

3.自定義

由於資料庫中儲存的是加密後的資料,所以使用者管理中,展現的資料必須是解密後的,這就需要我修改datatables原始碼來滿足我的需求,

 

decryptMake這個是我自定義的原始碼方法名,好吧,說實話,我都忘了我是咋弄的了,勉強找到這個方法,等我清醒的時候再回憶回憶。

 

這兩個方法是我自定義的,應該是仿照make方法寫的。

 

主要的目的是對相關欄位進行解密,我也沒寫什麼高深的方法,只是在vendor\yajra\laravel-datatables-oracle\src\yajra\Datatables\Engines\QueryBuilderEngine.php頁面中新增兩個方法decryptMakedecryptRender,實現我功能的是decryptRender方法,主要是在下面添了一段話

 

 

我忘了object是幹嘛的了,但好像沒那麼重要。

eyJpdiI6Ik56bEdSRUZLTVRWSVZXUm9aamc1Wmc9PSIsInZhb這段字串是所有加密的密文裡都有的,所以我拿它作為是否為密文的判斷依據,其他就沒啥了。

4.錯誤

專案上線後,發現運維管理模組的datatables不好使,報出Failed to load resource: the server responded with a status of 404 (Not Found)錯誤

 

上網查了一下,是因為url有問題,

 

但在本地測試是好使的,同樣的urlip地址和埠改為本地的,都好使,而且使用者管理也是使用的datatables也是好使的,所以,我推測是url字元過長導致的錯誤,後來驗證了下,的確是這樣,伺服器對get請求的字元有長度限制,我把url改成post請求,就好使了。

以下是瀏覽器對get請求的限制,作為擴充套件知識,本次報錯是伺服器對get請求的限制,不是瀏覽器:

http://blog.csdn.net/M_ChangGong/article/details/5764711

 

 

、檔案的上傳與下載

有幫助的文件:

http://laravelacademy.org/post/2333.html?utm_source=tuicool&utm_medium=referral

http://www.jianshu.com/p/76ba6a417561

http://blog.csdn.net/zhangfei8625/article/details/43057163

1. 前端

前端很簡單,只要是在form表單中新增enctype="multipart/form-data"這句話,就可以實現檔案的上傳,同時type定義為file就可以了

 

2. 後端

如果是儲存到其他空間,可以在config-filesystems.php中設定

 

這裡面public_path代表著public目錄下,該目錄的檔案,可以無需註冊,可直接訪問,這樣不怎麼安全,一些重要的資料最好是放在其他位置,可以放在storage目錄下

 

後臺相關程式碼:

 

若是手機端傳圖片,後臺儲存的話:

$_FILES判斷是否有圖片傳入

詳細程式碼:

 

若上傳失敗,顯示未獲取到檔案,有可能是上傳的檔案超出了php接收上限,修改php.ini檔案中的post_max_size 和upload_max_filesize欄位就行了

相關文件:http://www.365mini.com/page/php-upload-file-exceed-limit.htm

 

八、EXCEL匯入到mysql

1、安裝

使用Composer安裝依賴

首先在Laravel專案根目錄下使用Composer安裝依賴:

composer require maatwebsite/excel ~2.0.0
安裝後的設定

config/app.php中註冊服務提供者到providers陣列:
Maatwebsite\Excel\ExcelServiceProvider::class,

同樣在config/app.php中註冊門面到aliases陣列:

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

如果想要對Laravel Excel進行更多的自定義配置,執行如下Artisan命令:

php artisan vendor:publish

執行成功後會在config目錄下生成一個配置檔案excel.php

2、匯入

 

 

3、捕獲異常

 

相關文件:

http://blog.csdn.net/small_whale/article/details/51917211

http://bbs.csdn.net/topics/390011157

 

引入ffmpeg進行音訊轉換

參考:https://www.cnblogs.com/love-snow/articles/7246475.html

我沒有用上下載的zip包,而是直接到專案根目錄下輸入

composer require php-ffmpeg/php-ffmpeg

好像也引進去了

 

在vendor目錄下:

 

我看看咋用^_^

參考:

https://www.cnblogs.com/peteremperor/p/6477743.html(推薦)

http://blog.csdn.net/qq_38568388/article/details/78820809(參考)

https://laravel-china.org/topics/327/using-ffmpeg-to-deal-with-multimedia-files-under-laravel

 

直接create()的時候一直都提示:

local.ERROR: exception 'Alchemy\BinaryDriver\Exception\ExecutableNotFoundException' with message 'Executable not found, proposed : avprobe, ffprobe' in D:\xxxx\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php:160

估計是因為沒有找到對的地址: https://github.com/PHP-FFMpeg/PHP-FFMpeg

根據這個,有下載了

 

這個,放入到php_ffmepg中,然後將對應的ffmpeg.exe和ffprobe.exe目錄放入到create中

 

又一個問題:

local.ERROR: exception 'Alchemy\BinaryDriver\Exception\ExecutionFailureException' with message 'ffmpeg failed to execute command "D:\xxxx\vendor\php-ffmpeg\php-ffmpeg\bin\ffmpeg.exe" "-y" "-i" "D:\iEBP4JLSI-PHP\public/uploads/ceshi/Audio.mp3" "-threads" "12" "-acodec" "libfaac" "-b:a" "128k" "D:\iEBP4JLSI-PHP\public/uploads/video/video.pcm"' in D:\xxxx\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php:100

代表你選擇的格式$format = new FFMpeg\Format\Audio\Vorbis();與要轉換的格式不符

是音訊格式有問題,對方寫的格式是視訊,改成音訊就可以了,程式碼如下:

 

而後與百度語音識別進行互動,自定義類庫引入問題可以參考:http://blog.csdn.net/darry_zhao/article/details/52689635

與百度語音識別互動時,如果語音差別非常大,就說明你上傳的音訊不符合對方的要求:

 

設定ffmpeg轉換格式時,setAudioChannels為音訊聲道設定設為1即可,setAudioKiloBitrate為音訊位元速率設定,設為8或16都可以。