Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich eine Antwort in Laravel 5.5? Einführung in das Erstellen von Antworten (Code)

Wie erstelle ich eine Antwort in Laravel 5.5? Einführung in das Erstellen von Antworten (Code)

不言
不言Original
2018-07-25 17:27:451672Durchsuche

Wie erstellt Laravel 5.5 Antworten? Vielen Menschen ist das vielleicht nicht ganz klar, deshalb werde ich Ihnen als Nächstes vorstellen, wie Sie in Laravel 5.5 eine http-Antwort erstellen und andere Antworttypen vorstellen.

Antwort erstellen

String & Array

Nachdem alle Routen und Controller die Geschäftslogik verarbeitet haben, geben sie eine Antwort zurück, die an den Benutzer gesendet wird Browser-Antwort: Laravel bietet viele verschiedene Möglichkeiten, Antworten zurückzugeben. Die einfachste Antwort besteht darin, eine einfache Zeichenfolge von der Route oder dem Controller zurückzugeben. Das Framework konvertiert diese Zeichenfolge automatisch in eine vollständige HTTP-Antwort.

Route::get('/', function () {
    return 'Hello World';
});

Zusätzlich zur Rückgabe von Strings von Routen oder Controllern können Sie auch Arrays zurückgeben. Das Framework konvertiert das Array automatisch in eine JSON-Antwort.

Route::get('/', function () {
    return [1, 2, 3];
});

Hinweis: Es ist auch möglich, Eloquent-Sammlungen von Routen oder Controllern zurückzugeben, die ebenfalls automatisch in eine JSON-Antwort konvertiert werden.

Antwortobjekt

Normalerweise geben wir nicht einfach nur einen String oder ein Array von der Route zurück, in den meisten Fällen wird eine vollständige IlluminateHttpResponse-Instanz oder -Ansicht zurückgegeben.

Gibt eine vollständige Antwortinstanz zurück, sodass Sie den HTTP-Statuscode und die Header-Informationen der Antwort anpassen können. Antwortinstanzen erben von der Basisklasse SymfonyComponentHttpFoundationResponse, die eine Reihe von Methoden zum Erstellen von HTTP-Antworten bereitstellt.

Route::get('/', function () {
    return response('Hello World', 200)
        ->header('Content-Type', 'text/plain');
});

Antwortheader hinzufügen

Die meisten Antwortmethoden können in Form von Methodenketten aufgerufen werden, sodass die Antwort streamend aufgebaut werden kann (Streaming-Schnittstellenmuster). Mit der Header-Methode können Sie beispielsweise eine Reihe von Antwortheadern hinzufügen, bevor Sie die Antwort an den Benutzer senden.

return response($content)
    ->header('Content-Type', $type)
    ->header('X-Header-One', 'Header Value')
    ->header('X-Header-Two', 'Header Value');

Oder Sie können die withHeaders-Methode verwenden, um ein Array von Headern anzugeben, die der Antwort hinzugefügt werden sollen.

return response($content)
    ->withHeaders([
        'Content-Type' => $type,
        'X-Header-One' => 'Header Value',
        'X-Header-Two' => 'Header Value',
    ]);

Hinzufügen von Cookies zu Antworten

Das Hinzufügen von Cookies zu Antworten ist mithilfe der Cookie-Methode auf der Antwortinstanz einfach. Sie können beispielsweise die Cookie-Methode verwenden, um ein Cookie zu generieren und es der Antwortinstanz hinzuzufügen.

return response($content)
    ->header('Content-Type', $type)
    ->cookie('name', 'value', $minutes);

Die Cookie-Methode kann auch mehr zusätzliche optionale Parameter erhalten, die weniger häufig verwendet werden. Im Allgemeinen haben diese Parameter ähnliche Zwecke und Bedeutungen wie die von PHP nativ bereitgestellte setcookie-Methode.

->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)

Alternativ können Cookies mithilfe der Cookie-Fassade zu Antworten in einer „Warteschlange“ hinzugefügt werden. Die Warteschlangenmethode empfängt als Parameter eine Cookie-Instanz oder die Parameter, die zum Erstellen eines Cookies erforderlich sind, das der Antwort hinzugefügt wird, bevor sie an den Browser gesendet wird.

Route::get('cookie/response', function() {
    Cookie::queue(Cookie::make('site', 'www.baidu.com',1));
    Cookie::queue('author', 'admin', 1);
    
    return response('Hello Laravel', 200)
        ->header('Content-Type', 'text/plain');
});

Besuchen Sie http://www.adm.devp/cookie/response in Ihrem Browser. Dort können Sie diese beiden neuen Cookies sehen.

Cookie-Verschlüsselung

Standardmäßig werden vom Laravel-Framework generierte Cookies verschlüsselt und signiert, um Manipulationen auf der Clientseite zu verhindern. Wenn Sie möchten, dass eine bestimmte Teilmenge von Cookies bei der Generierung unverschlüsselt ist, können Sie diese Cookies über das $exclusive-Attribut ausschließen, das von der Middleware AppHttpMiddlewareEncryptCookies im Verzeichnis app/Http/Middleware bereitgestellt wird.

/**
 * 不需要被加密的cookies名称
 *
 * @var array
 */
protected $except = [
    'cookie_name',
];

Redirect

Eine Redirect-Antwort ist eine Instanz der IlluminateHttpRedirectResponse-Klasse und enthält die notwendigen Header-Informationen, um den Benutzer zu einer anderen URL umzuleiten. Es gibt viele Möglichkeiten, sie zu generieren Für die RedirectResponse-Instanz ist es am einfachsten, die globale Hilfsfunktion „redirect“ zu verwenden.

Route::get('dashboard', function () {
    return redirect('home/dashboard');
});

Manchmal möchten Sie den Benutzer zum Speicherort der vorherigen Anfrage umleiten. Nachdem das Formular beispielsweise gesendet wurde und die Überprüfung fehlschlägt, können Sie die Hilfsfunktion zurück verwenden, um zur vorherigen URL zurückzukehren (da Diese Funktion verwendet Session. Bevor Sie diese Methode verwenden, stellen Sie sicher, dass sich die entsprechende Route in der Web-Middleware-Gruppe befindet oder Session-Middleware angewendet wird.

Route::post('user/profile', function () {
    // 验证请求...
    return back()->withInput();
});

Zur benannten Route umleiten

Wenn Sie die Umleitungsmethode ohne Parameter aufrufen, wird eine IlluminateRoutingRedirector-Instanz zurückgegeben, und dann können alle Methoden auf der Redirector-Instanz verwendet werden.

Um beispielsweise eine RedirectResponse auf eine benannte Route zu generieren, können Sie die Route-Methode verwenden.

return redirect()->route('login');

Wenn die Route Parameter enthält, können Sie diese als zweiten Parameter an die Routenmethode übergeben:

// For a route with the following URI: profile/{id}
return redirect()->route('profile', ['id'=>1]);

Füllen Sie die Routenparameter über das Eloquent-Modell

If Sie möchten zu Routen mit ID-Parametern (eloquente Modellbindung) umleiten. Sie können das Modell selbst übergeben und die ID wird automatisch analysiert.

return redirect()->route('profile', [$user]);

Wenn Sie den Standardparameternamen in diesem Routenparameter anpassen möchten (der Standardwert ist id), müssen Sie die getRouteKey-Methode auf der Modellinstanz überschreiben.

/**
 * Get the value of the model's route key.
 *
 * @return mixed
 */
public function getRouteKey()
{
    return $this->slug;
}

Zur Controller-Methode umleiten

Sie können auch eine Methode generieren, die zum Controller umleitet. Übergeben Sie einfach den Controller und den Methodennamen an die Aktionsmethode. Denken Sie daran, dass Sie nicht den vollständigen Namespace des Controllers angeben müssen, da RouteServiceProvider von Laravel automatisch den Standard-Controller-Namespace festlegt.

return redirect()->action('HomeController@index');

Wenn für die Controller-Route Parameter erforderlich sind, können Sie die Parameter wie bei der Routenmethode als zweiten Parameter an die Aktionsmethode übergeben.

return redirect()->action('UserController@profile', ['id'=>1]);

Umleitung mit einmaligen Sitzungsdaten

Die Umleitung zu einer neuen URL und das Speichern der Daten in der einmaligen Sitzung erfolgt normalerweise gleichzeitig. Der Einfachheit halber können Sie eine erstellen RedirectResponse Die Instanz speichert die Daten dann in derselben Methodenkette in der Sitzung, was besonders praktisch ist, wenn Statusinformationen nach einer Aktion gespeichert werden.

Route::post('user/profile', function () {
    // 更新用户属性...
    return redirect('dashboard')->with('status', 'Profile updated!');
});

用户重定向到新页面之后,你可以从 Session 中取出并显示这些一次性信息,使用 Blade 语法实现如下:

@if (session('status'))
    <p class="alert alert-success">
        {{ session(&#39;status&#39;) }}
    </p>
@endif

注:这个一次性体现在第一次从 Session 取出数据之后,这些数据就会被销毁,不复存在。

其它响应类型

上面我们讲了 Response 和 RedirectResponse 两种响应类型,我们还可以通过辅助函数 response 很方便地生成其他类型的响应实例,当无参数调用 response 时会返回 Illuminate\Contracts\Routing\ResponseFactory 契约的一个实现,该契约提供了一些有用的方法来生成各种响应,如视图响应、JSON 响应、文件下载、流响应等等。

视图响应

如果你需要控制响应状态和响应头,并且还需要返回一个视图作为响应内容,可以使用 view 方法。

return response()
        ->view(&#39;hello&#39;, $data, 200)
        ->header(&#39;Content-Type&#39;, $type);

当然,如果你不需要传递自定义的 HTTP 状态码和头信息,只需要简单使用全局辅助函数 view 即可。

Route::get(&#39;view/response&#39;, function() {
   return view(&#39;hello&#39;);
});

注:视图响应的视图文件必须存在,视图文件位于 resources/views 目录中。

JSON响应

json 方法会自动将 Content-Type 头设置为 application/json,并使用 PHP 函数 json_encode 方法将给定数组转化为 JSON 格式的数据。

return response()->json([
        &#39;name&#39; => &#39;Abigail&#39;, 
        &#39;state&#39; => &#39;CA&#39;
]);

如果你想要创建一个 JSONP 响应,可以在 json 方法之后调用 withCallback 方法。

return response()
        ->json([&#39;name&#39; => &#39;Abigail&#39;, &#39;state&#39; => &#39;CA&#39;])
        ->withCallback($request->input(&#39;callback&#39;));

或者直接使用 jsonp 方法。

return response()
        ->jsonp($request->input(&#39;callback&#39;), [&#39;name&#39; => &#39;Abigail&#39;, &#39;state&#39; => &#39;CA&#39;]);

文件下载

download 方法用于生成强制用户浏览器下载给定路径文件的响应。download 方法接受文件名作为第二个参数,该参数决定用户下载文件的显示名称,你还可以将 HTTP 头信息作为第三个参数传递到该方法。

return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
return response()->download($pathToFile)->deleteFileAfterSend(true);

注:管理文件下载的 Symfony HttpFoundation 类要求被下载文件有一个 ASCII 文件名,这意味着被下载文件名不能是中文。

Route::get(&#39;download/response&#39;, function() {
    return response()->download(storage_path(&#39;app/photo/test.jpg&#39;), &#39;测试图片.jpg&#39;);
});

文件响应

file 方法可用于直接在用户浏览器显示文件,例如图片或 PDF,而不需要下载,该方法接收文件路径作为第一个参数,头信息数组作为第二个参数。

return response()->file($pathToFile);
return response()->file($pathToFile, $headers);

响应宏

如果你想要定义一个自定义的可以在多个路由和控制器中复用的响应,可以使用 Response 门面上的 macro 方法。

例如,在某个服务提供者的 boot 方法中编写代码如下:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;

class ResponseMacroServiceProvider extends ServiceProvider
{
    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        Response::macro(&#39;caps&#39;, function ($value) {
            return Response::make(strtoupper($value));
        });
    }
}

macro 方法接收响应名称作为第一个参数,闭包函数作为第二个参数,响应宏的闭包在 ResponseFactory 实现类或辅助函数 response 中调用宏名称的时候被执行。

Route::get(&#39;macro/response&#39;, function() {
    return response()->caps(&#39;test&#39;);
});

在浏览器中访问 http://www.adm.devp/macro/response ,输出入下:

TEST

相关推荐:

如何实现Laravel 5.5可响应接口

Laravel5.2博客实战视频教程

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Antwort in Laravel 5.5? Einführung in das Erstellen von Antworten (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn