1.使用數據庫事務的時候須要傳遞參數,使用了use關鍵字,不然的話傳遞不進去,代碼以下:javascript
public function postVote(Request $request){ $data = $request->all(); $count = DB::table("vote")->where("workdid",$data['id'])->where("ip", $data['ip'])->count(); if(DB::table("vote")->where("workdid",$data['id'])->where("ip", $data['ip'])->count()>0){ $ret = ['state' => 'fail', 'message' => '您已經給這個做品投過一票!']; }else{ DB::transaction(function () use($data){ DB::table("work")->where("id", $data["id"])->increment("vote"); DB::table("vote")->insert(["workdid"=>$data["id"], "ip"=>$data['ip']]); }); $ret = ['state' => 'success', 'message' => '投票成功']; } return response()->json($ret); }
2.分頁的時候須要把參數帶進去,使用appends()方法,還要顯示總共多少條記錄,代碼以下,前提是$list是查詢構建起調用paginate()方法返回的結果php
<div class="summary"> 共有 {{$list->total()}} 條數據 </div> @if ($list->hasPages()) <div class="pager"> {!! $list->appends($appends)->render() !!} </div> @endif
3.向主頁面中追加內容的時候,主頁面內容以下html
@section('sidebar') This is the master sidebar. @show
子頁面內容以下:java
@section('sidebar') @parent <p>This is appended to the master sidebar.</p> @endsection
注意主頁面@section的結束語句是@show,不是@endsection,同時子頁面中使用@parent代表是追加的內容laravel
4.不少javascript框架使用{{}}來表示要輸入到瀏覽器中的表達式,可使用@告訴blade引擎該表達式保持原生格式不作改動例如:ajax
<h1>Laravel</h1>
Hello, @{{ name }}.
就是說若是要使用javascript框架中使用到{{}},那麼前面要加@數據庫
5.Laravel5路由\home 沒法訪問
在apache配置文件中將全部的 AllowOverride none;設置爲AllowOverride all;配置文件具體位置因系統不一樣而改變,ubuntu14.0.1LTS 版本在/etc/apache2/apache2.conf文件中apache
6.部署好以後500錯誤json
安裝完laravel後,打開立刻出現了500錯誤,配置都是正確的,可是出現了500錯誤
------------------>`500 (Internal Server Error)`
要給緩存文件設置777權限,以下
chmod -R 777 storage (給storage 777權限)ubuntu
7.僅能有一個AI
有一次使用php artisan migrate ------->結果報錯了
緣由是主鍵id是AI,而設置一個外鍵xx_xx_id是integer類型,這就衝突了,解決方法只需將xx_xx_id改成unsigned integer類型
(像這樣的$table->integer('role_id')->unsigned();)
8.郵件發送530錯誤
郵箱發送出現了以下問題:Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required,
從錯誤嗎中看出是配置錯誤,可是咱們檢查了幾回都是正確的,緣由是緩存問題,這時候能夠
清除緩存php artisan cache:clear或重啓服務器php artisan serv
9.使用create插入數據錯誤
若是使用create出現MassAssignmentException in Model.php line 448
從錯誤中看出是模型中沒有定義白名單字段,解決以下:
class Contacts extends Model { protected $fillable = ['name', 'mobile', 'email', 'address', 'created_at', 'updated_at']; }
10.compose update報錯
錯誤爲:Fatal error: Uncaught exception 'ReflectionException' with message
解決方法可能以下:
1. composer dump-autoload
2. 配置文件錯誤,需修改,如我安裝時改了配置文件.env,而後報錯,這時候還原.env 就正常了
11.默認狀況下刀片語法的{{}}已經經過php的htmlentitys函數處理避免XSS攻擊,若是不想數據被處理,顯示原生的數據能夠用下面的方法
Hello, {!! $name !!}.
12.運行命令php artisan migrate莫名其妙的錯誤
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('slug')->unique(); $table->string('title'); $table->text('content'); $table->timestamps(); $table->timestamps('updated_at')->index(); });
這樣會報錯:
[Symfony\Component\Debug\Exception\FatalThrowableError]
Fatal error: Call to a member function index() on null
改爲下面就行了
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('slug')->unique(); $table->string('title'); $table->text('content'); $table->timestamps(); $table->timestamps('published_at')->index(); });
14.laravel命令集合
1)查看應用中全部的路由:php artisan route:list
2)建立控制器: php artisan make:controller BlogController --plain --plain參數表示命令用於建立一個空的控制器而不是標準的 RESTful 風格控制器
3)建立model: php artisan make:model --migration Post 建立Post模型並建立遷移文件
4)建立中間件:php artisan make:middleware OldMiddleware 建立一個OldMiddleware的中間件
15.定義一個token,媽蛋記不住
{'_token': '{{ csrf_token() }}', 'dir': 'product'}
{{ csrf_field() }}
<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
16.使用captcha驗證碼第三方插件的時候驗證隨機數是否正確,寫法以下
$data = $request->all(); $attributes = [ 'name'=>'用戶名', 'password'=>'密碼', 'captcha' =>'驗證碼' ]; $validator = \Validator::make( $data, [ 'name' => 'required', 'password' => 'required', 'captcha' => 'required|captcha', ], [ 'required' => ":attribute不能爲空", 'captcha.required' => '請輸入驗證碼', 'captcha.captcha' => '驗證碼錯誤,請重試' ], $attributes );
17.發送手機驗證碼的時候使用validator驗證手機驗證碼是否正確
發送驗證碼代碼以下
public function postValidatecode(Request $request){ $data = $request->all(); $code = rand(1000, 9999); session([config('session.session_key.register')=>$code]); $content = "您好,您本次註冊的驗證碼是" . $code . ',請妥善保管。'; $result = sendsms($data['mobile'], $content); return \Response::json($result); }
驗證這個驗證碼是否正確以下
$data = $request->all(); $attributes = [ 'name'=>'用戶名', 'password'=>'密碼', 'password_confirmation'=>'確認密碼', 'mobile'=>'手機號', 'idNo'=>'身份證號', 'validateCode'=>'驗證碼', ]; $rules = [ 'name'=>'required|unique:users', 'password' => array('bail', 'required', 'confirmed', 'regex:/^\w{6,15}$/'), 'password_confirmation' => 'required', 'mobile' => array('required','regex:/^1[3|4|5|6|7|8|9]\d{9}$/', 'unique:users'), 'validateCode'=>array('required', 'validatesmsg:register'), 'idNo'=> array('required','regex:/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/i'), 'agree' => 'required', ];
app\Providers\AppServiceProvider.php中的擴展方法以下,原理很簡單就是驗證這個session是否相等
class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Validator::extend('validatesmsg', function($attribute, $value, $parameters){ return $value == session(config('session.session_key.'.$parameters[0])); }); } /** * Register any application services. * * @return void */ public function register() { // } }