Laravelピットガイド(5)-リクエストと応答

13939 ワード

インターネットの典型的なWebアプリケーションとして,ユーザから要求されたデータを受信し,処理の結果をユーザに応答することは,最も基礎的で最も必須の機能である.原生のPHPでは、$_をよく使いますPOST、$_GET、$_REQUESTと$FILESは異なるリクエストに対して受信し、echo、var_も使用するexport()、printf()などの文はユーザに応答する.
Laravelでは、フレームワークの内部に独自のメカニズム要求と応答メカニズムが規定されています.この節では、この話題を一緒に勉強しましょう.
 
1、要求
(1)ルーティングパラメータ
Laravelのパラメータは,ルーティングで指定し,ルーティングのコールバック関数や指定したControllerで処理できる.栗を2つ挙げます.
例1:
\Illuminate\Support\Facades\Route::any('/welcome/{id}',function ($id){
    return $id;
});

この例では、http://ドメイン名/welcome/6にユーザがアクセスし、コールバック関数の$idパラメータは6という値を受信することができる.ここでのidパラメータはurlで必須です.
例2:
//    
\Illuminate\Support\Facades\Route::any('/welcome/{id?}',"MyController@hello");


//MyController  
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller
{
    public function hello(Request $req,$id='')
    {
        return $id;
    }
}

この例では、http://ドメイン名/welcome/6、クラスMyControllerのhello関数の$idパラメータにユーザーがアクセスすると6という値を受信できます.ここでのidパラメータはurlでオプションです.(注意例1と比較すると、ルーティングと関数パラメータの書き方に違いがある)
(2)URLにおけるGETパラメータの取得
ルーティングのコールバック関数であれ、controllerの動作関数であれ、最初のパラメータはRequestクラスインスタンスの注入に使用できます(関数の最初のパラメータはRequestタイプの変数です).
GETリクエストやGETパラメータが分からない方は、文章の一番下のリンクをクリックして連絡してください.
処理関数では、GETパラメータを取得します.
public function action(Request $req)
{
    $req->query(key);    //  key        value
}

(3)POSTパラメータの取得
public function hello(Request $req)
{
    $req->post(key);
}

(4)POSTとGETパラメータの混合取得(all関数はGETとPOSTのパラメータを同時に取得し、配列タイプを返すことができる)
public function hello(Request $req)
{
    $arr=$req->all(key);
    $arr[key];    //         value
}

(5)COOKIEパラメータ取得
public function hello(Request $req)
{
    $req->cookie(key);    //  key   cookie 
}

(6)その他
//    
//        http://192.168.1.5/hello/3?a=b
$req->url();    //    http://192.168.1.5/hello/3
$req->fullUrl();    //    http://192.168.1.5/hello/3?a=b
$req->path();    //    hello/3

 
 
2、応答
(1)通常文字列への応答
動作関数が直接return文字列であれば、次の栗を見てください.
public function action(Request $req)
{
    return "welcome";
}

(2)JSON応答
方法1:動作処理関数で配列を直接返す
public function action(Request $req)
{
    return [key=>value];    //Laravel         json     ,      
}

方法2:response()->json()を呼び出す
public function action(Request $req)
{
    return response()->json([
        key=>value
    ]);
}

(3)応答テンプレート
簡単な栗を挙げます.
public function action(Request $req)
{
    return view("welcome");
}

詳細は、本システムの第3編「Laravelピットガイド(3)-テンプレート」を参照してください.
(4)応答COOKIE
/*
$name : cookie key
$value : cookie  
$minutes : cookie    
$path : cookie    ,   "/"
$domain :     ,         
$secure :   true    https      
$httpOnly :   true js    cookie 
*/
return response(    )->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly);

(5)応答ヘッダ:次の例はドメイン間ヘッダである
public function hello(Request $req,$id='')
{
    return response("welcome",200)->withHeaders([
        'Access-Control-Allow-Origin'=>"*",
        'Access-Control-Allow-Headers'=>'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN',
        'Access-Control-Expose-Headers'=>'Authorization, authenticated',
        'Access-Control-Allow-Methods'=>'GET, POST, PATCH, PUT, OPTIONS',
        'Access-Control-Allow-Credentials'=>'true'
    ]);
}

 
 
3、ファイルのアップロード
(1)単一ファイルアップロード:フォームファイルのkeyがfであると仮定する
public function hello(Request $req)
{
    if($req->hasFile('f') && $req->file('f')->isValid())
    {
        $file['ext']=$req->f->extension();    //     
        $file['path']=$req->f->path();    //     
        $file['mine']=$req->f->getMimeType();    //  mime
        $file['originName']=$req->f->getClientOriginalName();    //     
        $file['size']=$req->f->getClientSize();    //    

        /*
        $file  
        array (
            'ext' => 'jpeg',
            'path' => '/tmp/phpxq5lSe',
            'mine' => 'image/jpeg',
            'originName' => '1.jpg',
            'size' => 196118,
        )
        */
        $file['uploadName']=sha1($file['originName']).'.'.$file['ext'];    //       
        $req->f->move(base_path().'/', $file['uploadName']);    //  1     
    }
    else
    {
        $req->f->getErrorMessage();    //    
    }
}

(2)マルチファイルアップロード:フォームファイルのkeyがf[]であると仮定
public function hello(Request $req,$id='')
{
    if($req->hasFile('f'))
    {
        foreach ($req->f as $f)
        {
            if(!$f->isValid()) continue;

            $file['ext']=$f->extension();    //     
            $file['path']=$f->path();    //     
            $file['mine']=$f->getMimeType();    //  mime
            $file['originName']=$f->getClientOriginalName();    //     
            $file['size']=$f->getClientSize();    //    
            $file['uploadName']=sha1($file['originName']).'.'.$file['ext'];  
            $f->move(base_path().'/', $file['uploadName']);    //  1     
        }
     }
}

 
 
---------------------------------------------------------------------------------------
最後に博主は土地を借りて宣伝して、漳州のプログラミンググループは新しくなって、これは漳州の青少年の情報学/ソフトウェアの設計の学習グループに向かって、意向のある学生はリンクをクリックして、私に連絡しましょう.