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提交驗證
在
這樣所有mui/*的路由,對post提交都沒有驗證,也可以在Kernel.php中介軟體組中去掉\App\Http\Middleware\VerifyCsrfToken::class,
五、新增和修改可以用一個頁面
判斷下物件是否存在就可以,
這裡面{{ method_field('PATCH') }} {{ csrf_field() }} 是用於PATCH提交的,瀏覽器不識別PATCH PUT DELETE
六、Datatables的使用
Laravel可以使用datatables,以下是我使用datatables的流程及問題;
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.js和jquery.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頁面中新增兩個方法decryptMake和decryptRender,實現我功能的是decryptRender方法,主要是在下面添了一段話
我忘了object是幹嘛的了,但好像沒那麼重要。
eyJpdiI6Ik56bEdSRUZLTVRWSVZXUm9aamc1Wmc9PSIsInZhb這段字串是所有加密的密文裡都有的,所以我拿它作為是否為密文的判斷依據,其他就沒啥了。
4.錯誤
專案上線後,發現運維管理模組的datatables不好使,報出Failed to load resource: the server responded with a status of 404 (Not Found)錯誤
上網查了一下,是因為url有問題,
但在本地測試是好使的,同樣的url把ip地址和埠改為本地的,都好使,而且使用者管理也是使用的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都可以。