ビューにはアプリケーションの HTML コードが含まれており、アプリケーションのコントローラー ロジックとプレゼンテーション ロジックを分離します。ビュー ファイルは、resources/views ディレクトリに保存されます。
ここに簡単なビューがあります:
<!-- 该视图存放 resources/views/greeting.php --><html> <body> <h1>Hello, <?php echo $name; ?></h1> </body></html>
このビューはresources/views/greeting.phpに保存されているので、次のようにグローバルヘルパー関数ビューで返すことができます:
Route::get('/', function () { return view('greeting', ['name' => 'James']);});
ご覧のとおり、ビューに渡します。メソッドの最初のパラメータは、resources/views ディレクトリ内の対応するビュー ファイルの名前で、2 番目のパラメータは、ビュー内のすべての有効なデータを含む配列です。この例では、name 変数を渡し、echo を実行することでビューに表示します。
もちろん、ビューは、「.」を使用して、resources/views のサブディレクトリにネストすることもできます。たとえば、ビューのストレージ パスが resource/views/admin/profile.php である場合、これが可能です。これを実行してください:
return view('admin.profile', $data);
ビューが存在するかどうかを判断する
ビューが存在するかどうかを判断する必要がある場合は、パラメータなしでビューの後にexists メソッドを呼び出すことができます。ビューがディスク上に存在する場合は、true を返します。
if (view()->exists('emails.customer')) { //}
パラメーターを指定せずにビューを呼び出すと、IlluminateContractsViewFactory インスタンスが返されるため、ファクトリ上のすべてのメソッドを呼び出すことができます。
ビューにデータを渡す
上の例でわかるように、単純に配列を介してデータをビューに渡すことができます:
return view('greetings', ['name' => 'Victoria']);
この方法でデータを渡す場合、$dataキーと値のペアの配列として、ビュー内で、 などの対応するキーを使用してデータ値にアクセスできます。さらに、 with メソッドを使用して独立したデータ フラグメントをビューに追加することもできます:
$view = view('greeting')->with('name', 'Victoria');
ビュー間でデータを共有する
すべてのビュー間でデータ フラグメントを共有する必要がある場合があります。この場合、ビューの share メソッドを使用できます。 Factory を使用するには、通常、サービス プロバイダーのブート メソッドで share メソッドを呼び出す必要があります。これを AppServiceProvider に追加するか、独立したサービス プロバイダーを生成して保存します。
<?phpnamespace App\Providers;class AppServiceProvider extends ServiceProvider{ /** * 启动所有应用服务 * * @return void */ public function boot() { view()->share('key', 'value'); } /** * 注册服务提供者 * * @return void */ public function register() { // }}
View Composerレンダリングされるコールバックまたはクラスメソッドです。ビューがレンダリングされるたびにバインドしたいデータがある場合は、View Composer を使用してロジックを別の場所に整理できます。
まず、ビュー Composer をサービスプロバイダーに登録します。IlluminateContractsViewFactory の基になる実装にアクセスするために、Laravel にはデフォルトのビュー Composer ディレクトリが含まれていないことに注意してください。たとえば、AppHttpViewComposers ディレクトリを作成できます:
<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;class ComposerServiceProvider extends ServiceProvider{ /** * 在容器中注册绑定. * * @return void * @author http://laravelacademy.org */ public function boot() { // 使用基于类的composers... view()->composer( 'profile', 'App\Http\ViewComposers\ProfileComposer' ); // 使用基于闭包的composers... view()->composer('dashboard', function ($view) { }); } /** * 注册服务提供者. * * @return void */ public function register() { // }}
View Composer の登録を含めるために新しいサービス プロバイダーを作成する場合は、構成ファイル config/app.php のプロバイダー配列にサービス プロバイダーを追加する必要があります。
Composer を登録したので、プロファイル ビューがレンダリングされるたびに ProfileComposer@compose が実行されます。 次に、Composer クラスを定義します。
<?phpnamespace App\Http\ViewComposers;use Illuminate\Contracts\View\View;use Illuminate\Users\Repository as UserRepository;class ProfileComposer{ /** * 用户仓库实现. * * @var UserRepository */ protected $users; /** * 创建一个新的属性composer. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { // Dependencies automatically resolved by service container... $this->users = $users; } /** * 绑定数据到视图. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); }}
ビューがレンダリングされる前に、Composer クラスの compose メソッドが呼び出されます。同時に、IlluminateContractsViewView はこのメソッドを注入し、その with メソッドを使用してデータをビューにバインドできるようにします。
注: すべてのビュー Composer はサービス コンテナを通じて解決されるため、Composer クラスのコンストラクターで必要な依存関係を宣言できます。
Composer を複数のビューに追加する
ビューの配列を最初の引数として Composer メソッドに渡すことで、ビュー Composer を複数のビューに一度に追加できます:
view()->composer( ['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer');
Composer メソッドは * ワイルドカードを受け入れ、Composer を許可しますすべてのビューに追加:
view()->composer('*', function ($view) { //});
View Creator と View Composer は非常に似ていますが、前者はビューがレンダリングされるまで待つのではなく、ビューがインスタンス化された直後に期限切れになる点が異なります。 create メソッドを使用してビュークリエーターを登録します:
view()->creator('profile', 'App\Http\ViewCreators\ProfileCreator');