laravel框架學習筆記


一、laravel的安裝

  1、composer

    作用:主要管理php中的依賴關系(類似於yum源)

    可以安裝的軟件:

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

          upload    //文本操作

          excel    //表格

          mail     //郵件

          log      //日志

          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

2、安裝laravel

  1、進入項目目錄

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

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

    或者安裝自己想要的版本

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

   2、配置Apache:

    進入到laracel根目錄

    cd blog/

    chmod 777 -R storage/

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

二、laravel配置文件

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

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

            生成密匙:php artisan key:generate

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

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

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

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

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

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

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

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

    2、php artisan up:網站上線

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

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

四、路由

    1、路由類型

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

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

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

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

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

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

    2、get();

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

    3、post();

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

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

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

    4、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());

              }    //處理

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

        HTTP請求路由:

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

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

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

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

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

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

        控制器路由:url和控制器中的所有動作(只需要按照指定的規范來編寫動作即可)

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

    6、路由的處理:

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

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

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

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

                });

        (3)路由參數:

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

                });    //參數必傳

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

                });    //可選參數

    7、控制器和路由

        (1)為控制器綁定路由時,可以直接使用HTTP請求形式的路由

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

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

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

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

        (3)隱式控制器路由

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

            訪問index,方法名應為getIndex

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

    8、路由組(以后台管理模塊為例)

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

          Route::get('/','IndexController@index');//后台首頁

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

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

        });

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

    9、中間件

        簡介:中間件為過濾進入應用的 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、中間件參數:中間件可以接收額外的參數。例如:中間件文件中
                    
public function handle($request, Closure $next, $role)
                    {
                      if (! $request->user()->hasRole($role)) {                      // Redirect...                       }                      return $next($request);                     }
                    路由中書寫:
                    中間件參數可以在定義路由時通過 : 分隔中間件名和參數名來指定,多個中間件參數可以通過逗號分隔
                    
Route::put('post/{id}', function ($id) {
                      //
                    })->middleware('role:editor');
              e、終端中間件:終端中間件,可以理解為一個善后的后台處理中間件。有時候中間件可能需要在 HTTP 響應發送到瀏覽器之后做一些工作,比如,Laravel 內置的 session 中間件會在響應發送到瀏覽器之后將 Session 數據寫到存儲器中,為了實現這個功能,需要定義一個終止中間件並添加 terminate 方法到這個中間件:
                    <?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 方法以單例的方式將該中間件注冊到容器中。關於服務容器我們就會在后面講到,暫時不深入展開了。

    10、請求:

        (1)獲取地址:
            $request->fullUrl();//輸出當前url地址
            $request->path();//獲取URL路由
            $request->url();//獲取URL地址初參數
            $request->is('request');//判斷路由是否為request,返回true或falst
      
  (2)獲取請求類型:
            $request->method();//返回請求類型
            $request->isMethod('請求類型');//判斷請求是否為特定請求
    11、閃存:閃存數據即 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

     12、文件上傳:
        (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)
    13、cookie
        查看:$requset->cookie();//查看所有的cookie
            或者\Cookie::get();
        設置:\Cookie::queue('key','value',生存時間);
            或者
              $cookie=cookie('key','value',生存時間);
              response('重定向')->cookie($cookie);
        (注:laravel框架把所有的cookie進行加密,所以$_COOKIE['name'] != $request->cookie())
    14、響應:所有的路由及控制器必須返回某個類型的響應,並發送回用戶的瀏覽器,如果響應數組的話,直接轉換成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('文件所在路徑');

五、數據庫遷移(migrate)

    1、數據庫遷移簡介

        (1)migrate簡介:

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

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

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

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

            命令行工具:sublime插件,terminal

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

    2、創建數據表

        (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

    3、數據庫填充

        (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

  六、數據庫操作

    1、連接數據庫(.env文件):

          DB_CONNECTION=mysql

          DB_HOST=127.0.0.1

          DB_PORT=3306

          DB_DATABASE=homestead

          DB_USERNAME=homestead

          DB_PASSWORD=secret

    2、執行原聲的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');

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

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

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

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

    4、連貫操作;

         查詢:

            \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();

  七、blade模版引擎

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM