レスポンスの基本Basic Responses
ルートへ文字列をリターンするReturning Strings From Routes
Route::get('/', function()
{
return 'Hello World';
});
カスタムレスポンスを生成するCreating Custom Responses
Response
インスタンスはSymfony\Component\HttpFoundation\Response
クラスを継承しています。これによりHTTPレスポンスを組み立てるための数多くのメソッドが提供されています。A Response
instance
inherits from the
Symfony\Component\HttpFoundation\Response
class, providing a variety of methods for building
HTTP responses.
$response = Response::make($contents, $statusCode);
$response->header('Content-Type', $value);
return $response;
Response
クラスメソッドへアクセスする必要があり、レスポンスのコンテンツにはビューを返したい場合、Response::view
メソッドが便利です。If you need access to the
Response
class methods, but want to
return a view as the response content, you may use
the Response::view
method for
convenience:
return Response::view('hello')->header('Content-Type', $type);
レスポンスにクッキーを付けるAttaching Cookies To Responses
$cookie = Cookie::make('name', 'value');
return Response::make($content)->withCookie($cookie);
リダイレクトRedirects
リダイレクトをリターンするReturning A Redirect
return Redirect::to('user/login');
フラッシュデータと伴にリダイレクトをリターンするReturning A Redirect With Flash Data
return Redirect::to('user/login')->with('message', 'Login Failed');
注目:
with
メソッドにより、フラッシュデーターがセッションに保存されますので、通常Session::get
メソッドで取得できます。Note: Since thewith
method flashes data to the session, you may retrieve the data using the typicalSession::get
method.
名前付きルートへリダイレクトするReturning A Redirect To A Named Route
return Redirect::route('login');
名前付きルートへパラメーターを渡し、リダイレクトするReturning A Redirect To A Named Route With Parameters
return Redirect::route('profile', array(1));
名前付きルートへ名前付きパラメータでリダイレクトするReturning A Redirect To A Named Route Using Named Parameters
return Redirect::route('profile', array('user' => 1));
コントローラーアクションへリダイレクトするReturning A Redirect To A Controller Action
return Redirect::action('HomeController@index');
コントローラーアクションへパラメーターを渡し、リダイレクトするReturning A Redirect To A Controller Action With Parameters
return Redirect::action('UserController@profile', array(1));
コントローラーアクションへ名前付きパラメーターを渡し、リダイレクトするReturning A Redirect To A Controller Action Using Named Parameters
return Redirect::action('UserController@profile', array('user' => 1));
ビューViews
典型的なビューはアプリケーションのHTMLで構成されており、コントローラーとドメインロジックをプレゼンテーションロジックから切り離す便利な方法です。ビューはapp/views
ディレクトリーに保存されます。Views typically contain the HTML
of your application and provide a convenient way of
separating your controller and domain logic from
your presentation logic. Views are stored in the
app/views
directory.
シンブルなビューは以下のような形式でしょう。A simple view could look something like this:
<!-- app/views/greeting.phpに保存されているビュー -->
<html>
<body>
<h1>こんにちは、<? echo $name; ?>さん</h1>
</body>
</html>
このビューをブラウザに送り返すには次のようにします。This view may be returned to the browser like so:
Route::get('/', function()
{
return View::make('greeting', array('name' => 'Taylor'));
});
View::make
の第二引数にはビューで使用するデーターの配列を渡します。The second argument passed to
View::make
is an array of data that
should be made available to the view.
ビューにデーターを渡すPassing Data To Views
// Using conventional approach
$view = View::make('greeting')->with('name', 'Steve');
// Using Magic Methods
$view = View::make('greeting')->withName('steve');
上の例では$name
変数はビューでアクセスされ、Steve
の値を取ります。In the example above the variable
$name
would be accessible from the
view, and would contain
Steve
.
ご希望であれば、データーの配列をmake
メソッドの第2パラメーターとして渡すこともできます。If you wish, you may pass an
array of data as the second parameter given to the
make
method:
$view = View::make('greetings', $data);
さらに全てのビューでアクセス可能なデーターを渡すこともできます。You may also share a piece of data across all views:
View::share('name', 'Steve');
ビューにサブビューを渡すPassing A Sub-View To A View
例えば、app/views/child/view.php
として保存されているサブビューがある場合、他のビューに以下のように渡せます。Sometimes you may wish to pass a
view into another view. For example, given a
sub-view stored at
app/views/child/view.php
, we could pass
it to another view like so:
$view = View::make('greeting')->nest('child', 'child.view');
$view = View::make('greeting')->nest('child', 'child.view', $data);
サブビューは親のビューからレンダーリングすることもできます。The sub-view can then be rendered from the parent view:
<html>
<body>
<h1>Hello!</h1>
<?php echo $child; ?>
</body>
</html>
ビューの存在を確認するDetermining If A View Exists
ビューが存在するかを確認する必要がある場合、View::exists
メソッドが使用できます。If you need to check if a view
exists, use the View::exists
method:
if (View::exists('emails.customer'))
{
//
}
ビューコンポーサーView Composers
ビューコンポーサーはビューがレンダーされる時に呼び出されるコールバック、もしくはクラスメソッドです。アプリケーション全体でレンダーされる可能性があるビューで、それに結びつけるデータが存在するならば、ビューコンポーサーで一箇所にコードをまとめる事ができます。ですから、ビューコンポーサーは"ビューモデル"とか"プレゼンター"のように機能します。View composers are callbacks or class methods that are called when a view is rendered. If you have data that you want bound to a given view each time that view is rendered throughout your application, a view composer can organize that code into a single location. Therefore, view composers may function like "view models" or "presenters".
ビューコンポーサーを定義するDefining A View Composer
View::composer('profile', function($view)
{
$view->with('count', User::count());
});
profile
ビューがレンダーされるたびに、count
データーはビューと結合されます。Now each time the
profile
view is rendered, the
count
data will be bound to the
view.
ビューコンポーサーを複数のビューに対し、一度に設定することも可能です。You may also attach a view composer to multiple views at once:
View::composer(array('profile','dashboard'), function($view)
{
$view->with('count', User::count());
});
クラスベースのビューコンポーサーを代わりに使っている場合、便利なのはお望みでしたら、アプリケーションのIoCコンテナを使いインスタンスの解決ができることです。If you would rather use a class based composer, which will provide the benefits of being resolved through the application IoC Container[/docs/4.2/ioc], you may do so:
View::composer('profile', 'ProfileComposer');
ビューコンポーサークラスは次のような形式です。A view composer class should be defined like so:
class ProfileComposer {
public function compose($view)
{
$view->with('count', User::count());
}
}
複数のコンポーサーを定義するDefining Multiple Composers
composers
メソッドで、コンポーサーのグループを一度に登録できます。You may use the
composers
method to register a group of
composers at the same time:
View::composers(array(
'AdminComposer' => array('admin.index', 'admin.profile'),
'UserComposer' => 'user',
'ProductComposer@create' => 'product'
));
**注目:**コンポーサークラスをどこに保存するかという規則はありません。どこにでも自由に設置し、
composer.json
ファイルでディレクティブを用い、オートロードできるように設定して下さい。Note: There is no convention on where composer classes may be stored. You are free to store them anywhere as long as they can be autoloaded using the directives in yourcomposer.json
file.
ビュークリエーターView Creators
ビュークリエーターはビューコンポーサーと全く同じように動作します。違いはビューがインスタンス化されたらすぐに実行されることです。ビュークリエーターを使用するには、ただcreator
メソッドを使用するだけです。View creators
work almost exactly like view composers; however,
they are fired immediately when the view is
instantiated. To register a view creator, simply use
the creator
method:
View::creator('profile', function($view)
{
$view->with('count', User::count());
});
特別なレスポンスSpecial Responses
JSONレスポンスを生成するCreating A JSON Response
return Response::json(array('name' => 'Steve', 'state' => 'CA'));
JSONレスポンスを生成するCreating A JSONP Response
return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
ファイルダウンロードレスポンスを生成するCreating A File Download Response
return Response::download($pathToFile);
return Response::download($pathToFile, $name, $headers);
注目: ファイルのダウンロードを管理するSymfonyのHttpFoundationは、ダウンロードするファイルにASCIIのファイル名をつけることを要求しています。Note: Symfony HttpFoundation, which manages file downloads, requires the file being downloaded to have an ASCII file name.
レスポンスマクロResponse Macros
多くのルートやコントローラの中で再利用できるように、カスタムレスポンスを定義することもできます。Response::macro
メソッドを使用して下さい。If you would like to define a
custom response that you can re-use in a variety of
your routes and controllers, you may use the
Response::macro
method:
Response::macro('caps', function($value)
{
return Response::make(strtoupper($value));
});
macro
機能は、最初の引数として名前を受けます。2つ目はクロージャーです。マクロのクロージャーはResponse
クラスにマクロ名を付け呼び出された場合に実行されます。The macro
function
accepts a name as its first argument, and a Closure
as its second. The macro's Closure will be executed
when calling the macro name on the
Response
class:
return Response::caps('foo');
app/start
下のファイルの一つの中で、マクロを定義することができます。もしくは、マクロ定義を独立させたファイルに記述し、start
ファイルの一つから読み込むこともできます。You may define your macros in one
of your app/start
files. Alternatively,
you may organize your macros into a separate file
which is included from one of your
start
files.