laravel框架學習筆記

1、laravel的安裝php

  一、composermysql

    做用:主要管理php中的依賴關係(相似於yum源)laravel

    能夠安裝的軟件:web

          curl       //主要用到微信開發中sql

          upload    //文本操做數據庫

          excel    //表格apache

          mail     //郵件json

          log      //日誌api

          laravel    //框架跨域

    安裝:

        下載地址:https://getcomposer.org/

        沒有php解釋器,沒法運行php命令

            yum install php-cli

        執行下載命令

        解壓後爲composer.phar,

        到該目錄下運行命令將composer.phar重命名到/usr/local/bin/下

          mv composer.phar /usr/local/bin/ composer並檢查是否重命名成功

        切換到composer的中國鏡像:

          composer config -g repo.packagist composer https://packagist.phpcomposer.com

二、安裝laravel

  一、進入項目目錄

    cd /usr/local/apache2.4/htdocs/

    composer create-project --prefer-dist laravel/laravel blog

    或者安裝本身想要的版本

    composer create-project --prefer-dist laravel/laravel blog 5.4.*

   二、配置Apache:

    進入到laracel根目錄

    cd blog/

    chmod 777 -R storage/

    打開瀏覽器輸入地址:localhost/blog/public/  顯示Larave歡迎潔面,安裝成功!!

2、laravel配置文件

    一、環境配置(.env文件)

        APP_KEY:環境變量解析(網站的密匙,保證網站的安全)

            生成密匙:php artisan key:generate

        APP_DEBUG:開發模式(默認爲ture,上線需設置爲false)

        獲取配置信息:env('')方法,設置環境配置中未設置的變量env('','')

    二、系統配置(config目錄下)

        讀取配置:config('文件名.配置名'),如:config('app.timezone')

        修改配置(臨時性的,不修改配置文件):config(['文件名.配置名'=>'值']);如:config(['app.timezone'=>'UTC']);

3、php artisan(php的工具匠):在項目根目錄下才能執行

    本生就是一些php文件,能夠在命令行模式下執行這些文件,能夠完成建立控制器、建立中間件、生成密匙等。

    一、php artisan down:網站下線(頁面爲views/503.blade.php)

    二、php artisan up:網站上線

    三、php artisan route:list:查看路由列表

    四、php artisan make:controller 控制器名:新建控制器

4、路由

    一、路由類型

      Route::get($rul,$callback);

      Route::post($rul,$callback);

      Route::put($rul,$callback);

      Route::patch($rul,$callback);

      Route::delete($rul,$callback);

      Route::options($rul,$callback);

    二、get();

        Route::get('login','LoginController@index');

    三、post();

        Route::post('check','LoginController@check');

        受CSRF保護(保護網站不受跨站請求僞造(CSRF)攻擊。保護表單安全。)

        需在表單內添加{{csrf_field()}}

    四、put();

        路由中書寫:

             Route::put('putWeb','LoginController@putweb');  //請求

             Route::put('put','LoginController@put');    //處理

        控制器書寫:

             public function putWeb(){

                return view('putweb');

              }    //請求

             public function put(Request $request){

                dd($request->input());

              }    //處理

    五、路由的三種常見形式:

        HTTP請求路由:

            Route::get('url信息','處理的邏輯地址或功能代碼');

            Route::put('url信息','處理的邏輯地址或功能代碼');

            Route::post('url信息','處理的邏輯地址或功能代碼');

            Route::delete('url信息','處理的邏輯地址或功能代碼');

        Resource路由:url和控制器中的7個標準RESTful動做相綁定

            Route::resource('url相關信息','控制器名稱');

        控制器路由:url和控制器中的全部動做(只須要按照指定的規範來編寫動做便可)

            Route::controller('url相關信息','控制器名稱');

    六、路由的處理:

        (1)把路由的處理交給控制器中的某個動做處理

            Route::get('/','IndexController@index')

        (2)直接處理路由(使用閉包函數形式處理)

            Route::get('/',function(){

                });

        (3)路由參數:

            Route::get('view/{id}',function($id){

                });    //參數必傳

            Route::get('view/{id?}',function($id=1){

                });    //可選參數

    七、控制器和路由

        (1)爲控制器綁定路由時,能夠直接使用HTTP請求形式的路由

          須要每個URL綁定到控制器中的某一個動做上

            Route::get('/','IndexController@index');

        (2)RESTful形式的資源控制器路由(只支持7種路由)

            Route::resource('url相關信息','控制器名稱');

        (3)隱式控制器路由

            Route::controller('url相關信息','控制器名稱');

            訪問index,方法名應爲getIndex

            訪問getViewMsg方法,地址爲msg/view-msg

    八、路由組(之後臺管理模塊爲例)

        Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'adminLogin'],function(){

          Route::get('/','IndexController@index');//後臺首頁

          Route::resource('user','UserController');//後臺用戶管理模塊

          Route::resource('goods','GoodsController');//後臺商品管理模塊

        });

        (注:namespace爲命名空間,prefix爲路由前綴,middleware爲中間件)

    九、中間件

        簡介:中間件爲過濾進入應用的 HTTP 請求提供了一套便利的機制。例如,Laravel 內置了一箇中間件來驗證用戶是否通過認證(如登陸),若是用戶沒有通過認證,中間件會將用戶重定向到登陸頁面,而若是用戶已經通過認證,中間件就會容許請求繼續往前進入下一步操做。

           固然,除了認證以外,中間件還能夠被用來處理不少其它任務。好比:CORS 中間件能夠用於爲離開站點的響應添加合適的頭(跨域);日誌中間件能夠記錄全部進入站點的請求,從而方便咱們構建系統日誌系統。

           Laravel 框架自帶了一些中間件,包括認證、CSRF 保護中間件等等。全部的中間件都位於 app/Http/Middleware 目錄下。

        建立中間件:php artisan make:middleware CheckToken

              在app/Http/MiddLeware目錄下新建一箇中間件類CheckToken

        註冊中間件:中間件分三類,分別是全局中間件、中間件組和指定路由中間件;

              a、全局中間件:在app/Http/Kernel.php的數組屬性$middleware中添加便可。

              b、分配中間件到指定路由:首先在app/Http/Kernel.php中添加本身的中間件key,定義後可使用middleware方法將其分配到路由:

                Route::get('/',function(){

                  //

                })->middleware('key');或路由組參數方式。

              c、中間件組:經過使用HTTP Kernel提供的$middlewareGroups屬性實現。

                Route::get('/', function () {   

                   //

                })->middleware('web');

                  Route::group(['middleware' => ['web']], function () {

                    //
                  });
                  默認狀況下, RouteServiceProvider 自動將中間件組 web 應用到 routes/web.php 文件,將中間件組 api 應用到 routes/api.php
              d、中間件參數:中間件能夠接收額外的參數。例如:中間件文件中
                    RouteServiceProviderwebroutes/web.phpapiroutes/api.phppublic function handle($request, Closure $next, $role)
                    {
                      if (! $request->user()->hasRole($role)) {                      // Redirect...                       }                      return $next($request);                     }
                    路由中書寫:
                    中間件參數能夠在定義路由時經過 : 分隔中間件名和參數名來指定,多箇中間件參數能夠經過逗號分隔
                    :Route::put('post/{id}', function ($id) {
                      //
                    })->middleware('role:editor');
終端中間件,能夠理解爲一個善後的後臺處理中間件。有時候中間件可能須要在 HTTP 響應發送到瀏覽器以後作一些工做,好比,Laravel 內置的  中間件會在響應發送到瀏覽器以後將 Session 數據寫到存儲器中,爲了實現這個功能,須要定義一個終止中間件並添加  方法到這個中間件:              e、終端中間件:sessionterminate
                    <?php

                    namespace Illuminate\Session\Middleware;

                    use Closure;

                    class StartSession
                    {
                        public function handle($request, Closure $next)
                        {
                            return $next($request);
                        }

                        public function terminate($request, $response)
                        {
                            // 存儲session數據...
                        }
                    }

                  terminate 方法將會接收請求和響應做爲參數。定義了一個終端中間件以後,還須要將其加入到 app/Http/Kernel.php 文件的全局中間件列表中。

                  當調用中間件上的 terminate 方法時,Laravel 將會從服務容器中取出一個該中間件的新實例,若是你想要在調用 handle 和 terminate 方法時使用同一個中間件實例,則須要使用容器提供的 singleton 方法以單例的方式將該中間件註冊到容器中。關於服務容器咱們就會在後面講到,暫時不深刻展開了。

    十、請求:

        (1)獲取地址:
            $request->fullUrl();//輸出當前url地址
            $request->path();//獲取URL路由
            $request->url();//獲取URL地址初參數
            $request->is('request');//判斷路由是否爲request,返回true或falst
        (2)獲取請求類型:
            $request->method();//返回請求類型
            $request->isMethod('請求類型');//判斷請求是否爲特定請求
    十一、閃存:閃存數據即 Flash Data,它的有效期是到下一個請求爲止,主要用在短生命週期的變量傳遞
        (1)控制器方法中寫入緩存:
            $request->flash();//所有寫入閃存
            $request->flashOnly();//把誰寫入到閃存
            $request->flaushExcept();//除了誰寫入閃存
            或者在返回錯誤提示的時候存入緩存;
            return back()->with('errors','用戶名長度有誤')->withInput();//所有存入閃存
        (2)頁面input中添加value="{{old('input的name')}}"
        詳細:http://www.imooc.com/article/17873?block_id=tuijian_wz
     十二、文件上傳:
        (1)獲取上傳文件信息:
            $img=$request->file('input的name');或者
            $img=$request->input的name
        (2)判斷文件是否上傳
            $request->hasFile('input的name');
        (3)把文件移動到指定目錄
            $ext=$request->file('img')->getClientOriginalExtension();//獲取後綴名
            $newFile=time().rand().".".$ext//新文件名
            $request->file('img')->move('目的地址',$newFile);//移動到指定目錄
        (4)
        (5)
    1三、cookie
        查看:$requset->cookie();//查看全部的cookie
            或者\Cookie::get();
        設置:\Cookie::queue('key','value',生存時間);
            或者
              $cookie=cookie('key','value',生存時間);
              response('重定向')->cookie($cookie);
        (注:laravel框架把全部的cookie進行加密,因此$_COOKIE['name'] != $request->cookie())
    1四、響應:全部的路由及控制器必須返回某個類型的響應,併發送回用戶的瀏覽器,若是響應數組的話,直接轉換成json。
        (1)響應字符串
        (2)響應數組:轉換成json
        (3)響應頁面:return view('頁面')->with(‘傳遞值’);
        (4)文件下載:
               return response()->download('文件所在路徑');
               會報錯,沒有擴展
               xampp:在/opt/lampp/etc/php.ini,找到php_fileinfo.dll並開啓
               重啓apache
        (5)文件查看:return response()->file('文件所在路徑');

5、數據庫遷移(migrate)

    一、數據庫遷移簡介

        (1)migrate簡介:

            方便團隊開發,一次更改,團隊成員都會影響到

            直接使用php代碼,而不是使用sql語句來操做數據庫

        (2)配置數據庫帳號信息:.env配置文件

        (3)數據庫遷移命令:php astisan migrate

            命令行工具:sublime插件,terminal

        (4)刪除自帶的用戶認證模塊:php astisan fresh 

    二、建立數據表

        (1)建立數據庫文件

            文件所在目錄:databases/migrations/數據庫遷移文件

            文件名:年_月_日_時分秒_create_tableName_table.php

            建立命令:php artisan make:migration create_name_table

        (2)

            在up方法中(新增數據表):

              Schema::create('數據庫名',function(Blueprint $table){

                $table->字段類型('字段名字');

                如:$table->increments('id');

              }) 

              執行數據庫遷移命令:php artisan migrate

    三、數據庫填充

        (1)建立模型類

            a、一個數據庫模型類對應一個數據表

            b、目錄:app/目錄下直接建立

                文件名:表名.php(首字母大寫)

            c、模型類結構:類名  extends Model

        (2)數據填充

            a、數據填充文件

                位置:databases/seeds/

                文件名:表名TableSeeder.php

                數據填充文件基本結構:類名 extends Seeder

                填充文件方法:

                    public function run(){

                        DB::table('表名')->delete();//清空原始數據

                        表名::create([

                          '字段名'=>'值'

                        ]);

                    }

            b、執行數據填充命令

                在databases/seeds/DatabaseSeeder.php文件中調用數據填充命令

                    在run方法中:$this->call('數據庫填充文件類名');

                php artisan db:seed

                可能會癡線一些問題,會提示一些類不能用

                     a、引入類的徹底命名空間

                     b、可使用composer命令:composer dump-autoload

  6、數據庫操做

    一、鏈接數據庫(.env文件):

          DB_CONNECTION=mysql

          DB_HOST=127.0.0.1

          DB_PORT=3306

          DB_DATABASE=homestead

          DB_USERNAME=homestead

          DB_PASSWORD=secret

    二、執行原聲的sql語句

         查詢:\DB::select('select * from tableName');  // \爲使用根命名空間

         刪除:\DB::delete('delete from tableName where id=XX');

         新增:\DB::insert('insert into tableName value()');

         修改:\DB::update('update tableName set 字段="值"');

         執行一段命令:\DB::statement('create database databaseName');

    三、事物機制:(判斷執行的sql語句知否執行成功。)

         開啓事物:\DB::beginTransaction();

         事物回滾:\DB::rollback();

         食物提交:\DB::commit();

    四、連貫操做;

         查詢:

            \DB::table('tableName')->get();//查詢全部數據

            \DB::table('tableName')->find();//查詢一條數據

            \DB::table('tableName')->where(''id,'=',3)->first();//查詢一條數據

         where():

            基本的>、<、=、<>條件,當爲=時可省略

            可做區間條件:\DB::table('tableName')->where([[''id,'>=',2],['id','<=',5]])->get();

            like匹配:\DB::table('tableName')->where([[''name,'like','%2%'],[''id,'<=',5]])->get();//and形式

                \DB::table()->where()->orwhere()->get();//or形式

            wherebetween&&whereNotBetween:

                \DB::table('tableName')->whereBetween('id',[10,15])->get();

                \DB::table()->whereNotBetween()->get()

            whereIn&&whereNotIn:

                \DB::table()->whereIn('id',[1,2,4,6,7])->get();

                \DB::table()->whereNotIn()->get();

            whereNull&&whereNotNull:

                \DB::table()->whereNull('字段')->get()

                \DB::table()->whereNotNull('字段')->get();

        value():

            \DB::table('tableName')->where('id',2)->value('name');//只取出這個字段的值

        pluck():

            \DB::table()->pluck();//取出一列數據

        聚合:

            \DB::table()->count();//總數

            \DB::table()->max('字段');//最大值

            \DB::table()->min('字段');//最小值

            \DB::table()->avg('字段');//平均值

            \DB::table()->sum('字段');//求和

        使用mysql原生函數:

            例如:獲得查詢字段的總數

            \DB::table('tableName')->select(DB::raw('count(*)' tot))->get();

  7、blade模版引擎

        引用簡書文章http://www.jianshu.com/p/7d65f9eb94be

相關文章
相關標籤/搜索