Bài giảng Phát triển phần mềm nguồn mở - Chương 6: Route, Views, Blade Templates - Nguyễn Hữu Thể

Route Prefixes

− The prefix group attribute may be used to prefix each

route in the group with a given URI.

• For example, you may want to prefix all route URIs within

the group with admin.

21

Route::group ( [ 'prefix' => 'admin' ], function () {

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

// Matches The "/admin/users" URL

} );

} );Implicit Binding

− Laravel automatically resolves Eloquent models

defined in routes or controller actions whose variable

names match a route segment name. For example:

− In this example:

• Since the Eloquent $user variable defined on the route

matches the {user} segment in the route's URI,

• Laravel will automatically inject the model instance that has

an ID matching the corresponding value from the request

URI.

22

Route::get('api/users/{user}', function (App\User $user) {

return $user->email;

});Customizing The Key Name

− Model binding to use a database column other than id

when retrieving a given model class:

• Override the getRouteKeyName method on the Eloquent

model:

23

// Get the route key for the model.

// @return string

public function getRouteKeyName(){

return 'slug';

}

pdf 81 trang kimcuc 6620
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển phần mềm nguồn mở - Chương 6: Route, Views, Blade Templates - Nguyễn Hữu Thể", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phát triển phần mềm nguồn mở - Chương 6: Route, Views, Blade Templates - Nguyễn Hữu Thể

Bài giảng Phát triển phần mềm nguồn mở - Chương 6: Route, Views, Blade Templates - Nguyễn Hữu Thể
ROUTE, VIEWS, BLADE TEMPLATES
Nguyễn Hữu Thể
PHÁT TRIỂN PHẦN MỀM NGUỒN MỞ
Routing
− Basic Routing
− Route Parameters 
• Required Parameters
• Optional Parameters
• Regular Expression Constraints
− Named Routes
− Route Groups 
• Middleware
• Namespaces
• Sub-Domain Routing
• Route Prefixes
− Route Model Binding 
• Implicit Binding
• Explicit Binding
− Form Method Spoofing
− Accessing The Current Route
2
Routing
3Image from: 
Basic Routing
− Laravel routes: providing a very simple and 
expressive method of defining routes:
− For most applications, you will begin by defining 
routes in your routes/web.php file.
− Test: 
4
Route::get ('/', function () {
return view('welcome');
} );
Basic Routing
− Test: 
5
Route::get ( 'foo', function () {
return 'Hello World';
} );
Available Router Methods
− The router allows you to register routes that respond 
to any HTTP verb:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
6
Route Parameters
7
Route::get ( 'foo', function () {
return 'Hello World';
} );
Route::get ( '/', function () {
return 'Hello World';
} );
Route::post ( 'foo/bar', function () {
return 'Hello World';
} );
Route::put ( 'foo/bar', function () {
//
} );
Route::delete ( 'foo/bar', function () {
//
} );
Responds to multiple HTTP
− Using the match method. 
− Or, register a route that responds to all HTTP verbs 
using the any method.
8
Route::match ( [ 'get','post' ], '/', function () {
return 'Hello World';
} );
Route::any ( 'foo', function () {
return 'Hello World';
} );
Route Parameters
− You may need to capture a user's ID from the URL. 
You may do so by defining route parameters:
9
Route::get ( 'hello/{name}', function ($name) {
return 'Hello ' . $name;
} );
Route Parameters
− You may define as many route parameters as required 
by your route:
− Note:
• Route parameters are always encased within {} braces and 
should consist of alphabetic characters. 
• Route parameters may not contain a - character. Use an 
underscore (_) instead.
10
Route::get ( 'posts/{post}/comments/{comment}', 
function ($postId, $commentId) {
//
} );
Optional Parameters
− Placing a ? mark after the parameter name. Make 
sure: a default value
11
Route::get ( 'user/{name?}', function ($name = null) {
if ($name == null)
//Response to 
else 
//Response to 
} );
Route::get ( 'user/{name?}', function ($name = 'John') {
return $name;
} );
Regular Expression Constraints
− Constrain the format of your route parameters using 
the where method on a route instance.
12
Route::get ( 'user/{name}', function ($name) {
return $name;
} )->where ( 'name', '[A-Za-z]+' );
Route::get ( 'user/{id}', function ($id) {
return $id;
} )->where ( 'id', '[0-9]+' );
Route::get ( 'user/{id}/{name}', function ($id, $name) {
return $id . ' ' . $name;
} )->where ( [ 'id' => '[0-9]+','name' => '[a-z]+' ] );
Regular Expression Constraints
13
Global Constraints
− A route parameter to always be constrained by a given regular 
expression, use the pattern method. 
− Define these patterns in the boot method of your 
RouteServiceProvider: app\Providers\RouteServiceProvider.php
− Once the pattern has been defined, it is automatically applied to all routes 
using that parameter name:
14
public function boot(){
Route::pattern('id', '[0-9]+');
parent::boot();
}
Route::get('user/{id}', function ($id) {
// Only executed if {id} is numeric...
});
Named Routes
− The convenient generation of URLs or redirects for 
specific routes. 
− name method:
− You may also specify route names for controller actions:
15
Route::get ( 'user/profile', function () {
//
} )->name ( 'profile' );
Route::get('user/profile', 
'UserController@showProfile')->name('profile');
Generating URLs To Named Routes
− Use the route's name when generating URLs or redirects via 
the global route function:
− If the named route defines parameters, you may pass the 
parameters as the second argument to the route function. 
16
// Generating URLs...
$url = route('profile');
// Generating Redirects...
return redirect()->route('profile');
Route::get('user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1]);
Route Groups
− Share route attributes:
• middleware 
• Namespaces
• Sub-Domain Routing
• Route Prefixes
− Shared attributes are specified in an array format as 
the first parameter to the Route::group() method.
17
Middleware
− To assign middleware to all routes within a group, 
you may use the middleware key in the group 
attribute array. 
18
Route::group ( [ 'middleware' => 'auth' ], function () {
Route::get ( '/', function () {
// Uses Auth Middleware
} );
Route::get ( 'user/profile', function () {
// Uses Auth Middleware
} );
} );
Namespaces
− Use-case for route groups is assigning the same PHP 
namespace to a group of controllers using the namespace
parameter in the group array:
− Default: the RouteServiceProvider includes your route 
files within a namespace group, allowing you to register 
controller routes without specifying the full 
App\Http\Controllers namespace prefix.
19
Route::group ( [ 'namespace' => 'Admin' ], function () {
// Controllers Within The 
//"App\Http\Controllers\Admin" Namespace
} );
Sub-Domain Routing
− Route groups may also be used to handle sub-domain 
routing. 
− The sub-domain may be specified using the domain
key on the group attribute array:
20
Route::group(['domain' => '{account}.myapp.com'], function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
Route Prefixes
− The prefix group attribute may be used to prefix each 
route in the group with a given URI. 
• For example, you may want to prefix all route URIs within 
the group with admin.
21
Route::group ( [ 'prefix' => 'admin' ], function () {
Route::get ( 'users', function () {
// Matches The "/admin/users" URL
} );
} );
Implicit Binding
− Laravel automatically resolves Eloquent models
defined in routes or controller actions whose variable
names match a route segment name. For example:
− In this example:
• Since the Eloquent $user variable defined on the route
matches the {user} segment in the route's URI,
• Laravel will automatically inject the model instance that has
an ID matching the corresponding value from the request
URI.
22
Route::get('api/users/{user}', function (App\User $user) {
return $user->email;
});
Customizing The Key Name
− Model binding to use a database column other than id 
when retrieving a given model class:
• Override the getRouteKeyName method on the Eloquent 
model:
23
// Get the route key for the model.
// @return string
public function getRouteKeyName(){
return 'slug';
}
Explicit Binding
− Use the router's model method. 
• In the boot method of the RouteServiceProvider class:
− Next, define a route that contains a {user} parameter:
− Since we have bound all {user} parameters to the App\User 
model, 
• A User instance will be injected into the route. 
• For example, a request to profile/1 will inject the User 
instance from the database which has an ID of 1.
24
public function boot(){
parent::boot();
Route::model('user', App\User::class);
}
Route::get ( 'profile/{user}', function (App\User $user) {
//
} );
Customizing The Resolution Logic
− Use your own resolution logic
• Use the Route::bind method. 
25
public function boot(){
parent::boot();
Route::bind('user', function ($value) {
return App\User::where('name', $value)->first();
});
}
Form Method Spoofing
− HTML forms do not support PUT, PATCH or DELETE 
actions. 
• So, when defining PUT, PATCH or DELETE routes that are 
called from an HTML form, you will need to add a hidden 
_method field to the form. 
• The value sent with the _method field will be used as the 
HTTP request method.
− Use the method_field helper to generate the _method 
input:
26
{{ method_field('PUT') }}
Accessing The Current Route
− To access information about the route handling the 
incoming request.
27
$route = Route::current ();
$name = Route::currentRouteName ();
$action = Route::currentRouteAction ();
Views
1. Creating Views
2. Passing Data To Views
3. Sharing Data With All Views
4. View Composers
28
Views
29Image from: khoapham.vn
Views
− Views contain the HTML served by your application and 
separate your controller / application logic from your 
presentation logic. 
− Views are stored in the resources/views directory. 
− This view is stored at resources/views/greeting.blade.php
30
Hello, {{ $name }}
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
− The first argument: the name of the view. 
− The second argument is an array of data that should be made 
available to the view. 
❖ Views may also be nested within sub-directories of the 
resources/views directory. 
• For example, if your view is stored at 
resources/views/admin/profile.blade.php, you may reference 
it like so:
31
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
return view('admin.profile', $data);
Determining If A View Exists
− If you need to determine if a view exists, you may use the 
View facade. The exists method will return true if the 
view exists:
32
use Illuminate\Support\Facades\View;
if (View::exists ( 'emails.customer' )) {
//
}
Passing Data To Views
− An array of data to views:
− Data should be an array with key/value pairs. 
• Inside your view, you can then access each value using its 
corresponding key, such as . 
• You may use the with method to add individual pieces of 
data to the view:
33
return view('greetings', [ 'name' => 'Victoria', 
'job'=>'Developer, 
'more_data'=> $data
]);
return view('greeting')->with('name', 'Victoria');
Sharing Data With All Views
− Share a piece of data with all views that are rendered by 
your application. 
• Using the view facade's share method within a service 
provider's boot method.
• Add them to the AppServiceProvider.
34
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider{
public function boot() {
View::share('key', 'value');
}
public function register() {
//
}
}
Sharing Data With All Views - Example
− Step 1 − Add the following line in routes/web.php
− Step 2 − Create two view files — test.php and test2.php with the same 
code. These are the two files which will share data. 
resources/views/test.php & resources/views/test2.php
35
Route::get('/test', function(){
return view('test');
});
Route::get('/test2', function(){
return view('test2');
});
Sharing Data With All Views - Example
− Step 3 − Change the code of boot method in the file 
app/Providers/AppServiceProvider.php as shown below. 
− (Here, we have used share method and the data that we have passed will be 
shared with all the views.) 
− app/Providers/AppServiceProvider.php
36
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider{
public function boot(){
view()->share('name', 'Nguyễn Trần Lê'); 
}
public function register() {
//
}
}
Sharing Data With All Views - Example
− Step 4 − Visit the following URLs.
• 
• 
37
View Composers
− Callbacks or class methods that are called when a view is 
rendered. 
− For this example:
• Let's register the view composers within a service provider.
• We'll use the View facade to access 
Illuminate\Contracts\View\Factory. 
• Laravel does not include a default directory for view 
composers.
• For example, you could create an 
App\Http\ViewComposers directory:
38
View Composers
− Create an App\Http\ViewComposers directory:
39
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider {
public function boot() {
// Using class based composers...
View::composer ( 'profile', 'App\Http\ViewComposers\ProfileComposer' );
// Using Closure based composers...
View::composer ( 'dashboard', function ($view) {
//
} );
}
public function register() {
//
}
}
View Composers
− Now that we have registered the composer, 
− The ProfileComposer@compose method will be executed 
each time the profile view is being rendered:
40
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\UserRepository;
class ProfileComposer{
protected $users;
public function __construct(UserRepository $users){
// Dependencies automatically resolved by service container...
$this->users = $users;
}
public function compose(View $view) {
$view->with('count', $this->users->count());
}
}
Attaching A Composer To Multiple Views
− Attach a view composer to multiple views: 
• the first argument to the composer method:
− The * character as a wildcard, attach a composer to 
all views:
41
View::composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
View::composer('*', function ($view) {
//
});
View Creators
− View creators are very similar to view composers;
− They are executed immediately after the view is 
instantiated instead of waiting until the view is about to 
render. 
42
View::creator('profile', 
'App\Http\ViewCreators\ProfileCreator');
BLADE TEMPLATES
1. Introduction
2. Template Inheritance 
▪ Defining A Layout
▪ Extending A Layout
3. Displaying Data 
▪ Blade & JavaScript Frameworks
4. Control Structures 
▪ If Statements
▪ Loops
▪ The Loop Variable
▪ Comments
▪ PHP
5. Including Sub-Views 
▪ Rendering Views For Collections
6. Stacks
43
BLADE TEMPLATES
44Image from: khoapham.vn
Giới thiệu Blade Templates
− Cho phép sử dụng code PHP thuần ở trong view. 
− Các Blade view được compiled từ code PHP và được 
cache cho đến khi chúng được chỉnh sửa => không làm 
tăng thêm bộ nhớ. 
− Sử dụng đuôi .blade.php
• Lưu trong resources/views.
45
Layout
2 lợi ích khi sử dụng Blade: template inheritance và sections. 
46
App Name - @yield('title')
@section('sidebar')
This is the master sidebar.
@show
@yield('content')
@yield('title') is used to display the value of the title
@section('sidebar') is used to define a section named sidebar
@show is used to display the contents of a section
@yield('content') is used to display the contents of content
Kế thừa một layout
− Khi tạo một trang con, sử dụng Blade @extends directive 
để chỉ ra layout của trang con này "inherit" từ đâu. 
− Views kế thừa một Blade layout có thể inject nội dung 
vào trong sections using @section directives của layout. 
47
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
This is appended to the master sidebar.
@endsection
@section('content')
This is my body content.
@endsection
Kế thừa một layout
− Blade views có thể được trả về từ routes bằng cách sử 
dụng hàm global view
48
Route::get('blade', function () {
return view('child');
});
49
App Name - @yield('title')
@section('sidebar')
This is the master sidebar.
@show
@yield('content')
@extends('app')
@section('title', 'Page Title')
@section('sidebar')
@parent
This is appended to the master 
sidebar.
@endsection
@section('content')
This is my body content.
@endsection
Route::get ( 'blade', function () {
return view ( 'child' );
} );
Hiển thị dữ liệu
− Truyền dữ liệu vào Blade views bằng cách đặt biến trong cặp 
ngoặc nhọn. 
− Hiển thị nội dung của biến name variable như sau:
50
Route::get ( 'greeting', function () {
return view ( 'welcome', [ 'name' => 'Samantha' ] );
} );
Hello, {{ $name }}
Hiển thị dữ liệu nếu tồn tại
− Cú pháp kiểm tra biến:
− Hoặc:
51
{{ isset($name) ? $name : 'Default' }}
{{ $name or 'Default' }}
Hiện dữ liệu chưa Unescaped
− Mặc định, cặp {{ }} được tự động gửi qua hàm 
htmlentities của PHP để ngăn chặn tấn công XSS. 
− Nếu không muốn dữ liệu bị escaped, sử dụng cú pháp:
52
Hello, {!! $name !!}.
Hello, {{ $name }}.
Blade & JavaScript Frameworks
− Vì nhiều JavaScript frameworks cũng sử dụng cặp "ngoặc 
nhọn" để cho biết một biểu thức cần được hiển thị lên 
trình duyệt.
➢ Có thể sử dụng biểu tượng @ để nói cho Blade biết được biểu 
thức này cần được giữ lại. 
53
Laravel Hello, @{{ name }}.
The @verbatim Directive
− Nếu muốn hiển thị biến JavaScript trong template 
➔ Bọc chúng trong directive
54
@verbatim 
 Hello, {{ name }}. 
Cấu trúc điều kiện
− Cấu trúc if:
• @if, @elseif, @else, và @endif.
55
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
Vòng lặp
56
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
This is user {{ $user->id }}
@endforeach
@while (true)
I'm looping forever.
@endwhile
Continue
57
@foreach ($users as $user)
@if ($user->type == 1)
@continue
@endif
{{ $user->name }}
@if ($user->number == 5)
@break
@endif
@endforeach
Continue
58
@foreach ($users as $user)
@continue($user->type == 1)
{{ $user->name }}
@break($user->number == 5)
@endforeach
Biến vòng lặp
− Trong vòng lặp:
• Một biến $loop sẽ tồn tại bên trong vòng lặp. 
• Cho phép truy cập một số thông tin hữu ích của vòng lặp 
như index của vòng lặp hiện tại, vòng lặp đầu, vòng lặp cuối
59
@foreach ($users as $user)
@if ($loop->first)
This is the first iteration.
@endif
@if ($loop->last)
This is the last iteration.
@endif
This is user {{ $user->id }}
@endforeach
Biến vòng lặp
− Nếu vòng lặp lồng nhau, truy cập biến $loop của vòng lặp 
tra qua thuộc tính parent:
60
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Biến $loop
61
Thuộc tính Miêu tả
$loop->index Chỉ số index hiện tại của vòng lặp (starts at 0).
$loop->iteration Các vòng lặp hiện tại (starts at 1).
$loop->remaining Số vòng lặp còn lại.
$loop->count Tổng số vòng lặp.
$loop->first Vòng lặp đầu tiên.
$loop->last Vòng lặp cuối cùng.
$loop->depth Độ sâu của vòng lặp hiện tại.
$loop->parent
Biến parent loop của vòng lặp trong 1 vòng lặp 
lồng.
Comments
− Blade cho phép comment trong view. 
62
{{-- This comment will not be present in the rendered HTML --}}
Including Sub-Views
− @include: chèn một Blade view từ một view khác.
− Tất cả các biến tồn tại trong view cha đều có thể sử dụng 
ở view chèn thêm.
− Truyền một mảng dữ liệu bổ sung cho view
63
@include('shared.errors')
@include('view.name', ['some' => 'data'])
Rendering Views cho Collections
− Có thể kết hợp vòng lặp và view chèn thêm trong một 
dòng với @each directive
• Tham số thứ nhất là tên của view partial để render các element 
trong mảng hay collection. 
• Tham số thứ hai là một mảng hoặc collection mà bạn muốn lặp
• Tham số thứ ba là tên của biến được gán vào trong vòng lặp bên 
view. 
64
@each('view.name', $jobs, 'job')
Stacks
− Để xác định thư viện JavaScript libraries cần cho view 
con:
• Blade cho phép đẩy tên stack để cho việc render ở một vị trí nào 
trong view hoặc layout khác.
− Có thể đẩy một hoặc nhiều vào stack. 
65
@push('scripts')
@endpush
@stack('scripts')
Mở rộng Blade
− Tùy biến directives bằng phương thức directive. Khi trình 
viên dịch của Blade gặp directive, nó sẽ gọi tới callback 
được cung cấp với tham số tương ứng.
66
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
public function boot() {
Blade::directive('datetime', function($expression) {
return "format('m/d/Y H:i'); ?>";
});
}
public function register() {
//
}
}
Forms & HTML
− Laravel provides various in built tags to handle HTML 
forms easily and securely. 
− All the major elements of HTML are generated using 
Laravel. 
− To support this, we need to add HTML package to 
Laravel using composer.
67
Forms & HTML - Instalation
− Begin by installing this package through Composer. Run the following 
from the terminal:
composer require "laravelcollective/html":"^5.3.0"
− Next, add your new provider to the providers array of config/app.php:
'providers' => [
// ...
Collective\Html\HtmlServiceProvider::class,
// ...
],
− Finally, add two class aliases to the aliases array of config/app.php:
'aliases' => [
// ...
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
// ...
], 68
Forms & HTML - Opening A Form
{!! Form::open(['url' => 'foo/bar']) !!}
//
{!! Form::close() !!}
− By default, a POST method will be assumed; however, you are 
free to specify another method:
echo Form::open(['url' => 'foo/bar', 'method' => 'put'])
− Note: Since HTML forms only support POST and GET, PUT 
and DELETE methods will be spoofed by automatically 
adding a _method hidden field to your form.
69
Forms & HTML - Opening A Form
− You may also open forms that point to named routes or 
controller actions:
echo Form::open(['route' => 'route.name'])
echo Form::open(['action' => 'Controller@method'])
− You may pass in route parameters as well:
echo Form::open(['route' => ['route.name', $user->id]])
echo Form::open(['action' => ['Controller@method', 
$user->id]])
− If your form is going to accept file uploads, add a files option 
to your array:
echo Form::open(['url' => 'foo/bar', 'files' => true])
70
Forms & HTML - Label 
− Generating A Label Element
echo Form::label('email', 'E-Mail Address');
− Specifying Extra HTML Attributes
echo Form::label('email', 'E-Mail Address', ['class' => 
'awesome']);
− Note: After creating a label, any form element you create with a name 
matching the label name will automatically receive an ID matching the 
label name as well.
71
Forms & HTML - Text Input
− Generating A Text Input
echo Form::text('username');
− Specifying A Default Value
echo Form::text('email', 'example@gmail.com');
− Note: The hidden and textarea methods have the same signature as the text 
method.
72
Forms & HTML - Password Input
− Generating A Password Input
echo Form::password('password', ['class' => 'awesome']);
− Generating Other Inputs
echo Form::email($name, $value = null, $attributes = []);
echo Form::file($name, $attributes = []);
73
Forms & HTML - Checkbox Or Radio Input
− Generating A Checkbox Or Radio Input
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
− Generating A Checkbox Or Radio Input That Is Checked
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
74
Forms & HTML – Number, Date, File
− Generating A Number Input
echo Form::number('name', 'value');
− Generating A Date Input
echo Form::date('name', \Carbon\Carbon::now());
− Generating A File Input
echo Form::file('image');
75
Forms & HTML – Drop-Down Lists
− Generating A Number Input
echo Form::number('name', 'value');
− Generating A Drop-Down List
echo Form::select('size', ['L' => 'Large', 'S' => 'Small']);
− Generating A Drop-Down List With Selected Default
echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], 'S');
− Generating a Drop-Down List With an Empty Placeholder
• This will create an element with no value as the very first option of your drop-
down.
echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, 
['placeholder' => 'Pick a size...']);
76
Forms & HTML – Drop-Down Lists
− Generating a List With Multiple Selectable Options
echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, ['multiple' 
=> true]);
− Generating A Grouped List
echo Form::select('animal',[
'Cats' => ['leopard' => 'Leopard'],
'Dogs' => ['spaniel' => 'Spaniel'],
]);
− Generating A Drop-Down List With A Range
echo Form::selectRange('number', 10, 20);
− Generating A List With Month Names
− echo Form::selectMonth('month');
77
Forms & HTML – Buttons
− Generating A Submit Button
echo Form::submit('Click Me!');
− Note: Need to create a button element? Try the button method. It has the 
same signature as submit.
78
Forms & HTML – Generating URLs
− Generate a HTML link to the given URL.
echo link_to('foo/bar', $title = null, $attributes = [], $secure = null);
− Generate a HTML link to the given asset.
echo link_to_asset('foo/bar.zip', $title = null, $attributes = [], $secure = 
null);
− Generate a HTML link to the given named route.
echo link_to_route('route.name', $title = null, $parameters = [], 
$attributes = []);
− Generate a HTML link to the given controller action.
echo link_to_action('HomeController@getIndex', $title = null, 
$parameters = [], $attributes = []);
79
Forms & HTML – Example
− resources/views/form.php
80
<?php
echo Form::open(array('url' => 'foo/bar'));
echo Form::text('username','nguyentranle') . '';
echo Form::text('email', 'nguyentranle@gmail.com') . '';
echo Form::password('password') . '';
echo Form::checkbox('name', 'value') . 'Checkbox';
echo Form::radio('name', 'value') . 'Radio button';
echo Form::file('image') . '';
echo Form::select('size', array('L' => 'Large', 'S' => 'Small')) . '';
echo Form::submit('Click Me!');
echo Form::close();
?>
Forms & HTML – Example
− Routes/web.php
− Test: 
81
Route::get('/form',function(){
return view('form');
});

File đính kèm:

  • pdfbai_giang_phat_trien_phan_mem_nguon_mo_chuong_6_route_views.pdf