You are on page 1of 13

L

aravelCheatShee
t
Artisan
phpartisan--helpOR-h
phpartisan--quie
tOR-q
phpartisan--vers
ionOR-V
phpartisan--no-i
nteractionO
R-n
phpartisan--ansi
phpartisan--no-a
nsi
phpartisan--env
//-v|vv|vvvIncre
asetheverb
osi
tyo
fmessages:1forn
ormalo
utput,2f
ormor
everbo
seoutputan
d3fordebug
phpartisan--verb
ose

phpartisanchange
s
phpartisanclear-
compiled
phpartisandown
phpartisandump-a
utoload
phpartisanenv
phpartisanhelp
phpartisanlist
phpartisanmigrat
e
phpartisanoptimi
ze
phpartisanroutes
phpartisanserve
phpartisantinker
phpartisanup
phpartisanworkbe
nch

phpartisanasset:
publish[--b
enc
h[="
vendor/package"]][
--path[
="..."]][
packag
e]
phpartisanauth:r
eminders
phpartisancache:
clear
phpartisancomman
d:makename[--
comm
and[="..."]][--p
ath[="...
"]][--na
mespace
[="
..."
]]
phpartisanconfig
:publish
phpartisancontro
ller:make[-
-be
nch=
"vendor/package"]
phpartisandb:see
d[--class[=
"..
."]][--database[="..
."]]
phpartisankey:ge
nerate
phpartisanmigrat
e[--bench="
ven
dor/
package"][--data
base[="..
."]][--p
ath[=".
.."
]][
--p
ackage
[="
..."]][
--pret
end][--
seed]
phpartisanmigrat
e:install[-
-da
taba
se[="..."]]
phpartisanmigrat
e:makename[--
benc
h="vendor/package
"][--cre
ate][--p
ackage[
=".
.."]
][--path
[="
..."]][
--tabl
e[="..."
]]
phpartisanmigrat
e:refresh[-
-da
taba
se[="..."]][--se
ed]
phpartisanmigrat
e:reset[--d
ata
base
[="..."]][--pret
end]
phpartisanmigrat
e:rollback[
--d
atab
ase[="..."]][--p
retend]
phpartisanqueue:
listen[--qu
eue
[=".
.."]][--delay[="
..."]][-
-memory[=
"..."]][-
-tim
eou
t[="..
."]
][conn
ection]
phpartisanqueue:
subscribe[-
-ty
pe[=
"..."]]queueurl
phpartisanqueue:
work[--queu
e[=
"...
"]][--delay[="..
."]][--m
emory[=".
.."]][
--s
leep
][connec
tio
n]
phpartisansessio
n:table
phpartisanview:p
ublish[--pa
th[
="..
."]]package

Composer
composercreate-pr
ojectlarave
l/l
arav
elfolder_name
composerinstall
composerupdate
composerdump-auto
load[--opti
miz
e]
composerself-upda
te
Routing
Route::get('foo',function(){}
);
Route::get('foo','ControllerN
ame
@fun
ction');
Route::controller(
'foo','FooC
ont
roll
er');

TriggeringErr
ors
App::abort(404);
App::missing(funct
ion($excepti
on)
{});
thrownewNotFound
HttpExceptio
n;

RouteParamete
rs
Route::get('foo/{b
ar}',functi
on(
$bar
){});
Route::get('foo/{b
ar?}',funct
ion
($ba
r='bar'){});

HTTPVerbs
Route::any('foo',function(){}
);
Route::post('foo',function(){
});
Route::put('foo',function(){}
);
Route::patch('foo'
,function()
{})
;
Route::delete('foo
',function(
){}
);
//RESTfulactions
Route::resource('f
oo','FooCon
tro
ller
');

SecureRoutes
Route::get('foo',array('https
',func
tion(){}));

RouteConstrai
nts
Route::get('foo/{b
ar}',functi
on(
$bar
){})
->where('bar','[
0-9]
+')
;
Route::get('foo/{b
ar}/{baz}',fun
ctio
n($bar,$baz){})
->where(array('ba
r'=
>'[0-9]+','ba
z'=>'
[A-Za-z
]')
)

Filters
//Declareanauthfilter
Route::filter('aut
h',function
(){
});
//Registeraclas
sasafilte
r
Route::filter('foo
','FooFilte
r')
;
//Routesinthisgrouparegu
ard
edb
ythe'auth'filt
er
Route::get('foo',array('befor
e'=>'
auth',function()
{}));
Route::group(array
('before'=>'a
uth'
),function(){});
//Patternfilter
Route::when('foo/*
','foo');
//HTTPverbpatte
rn
Route::when('foo/*
','foo',ar
ray
('po
st'));

NamedRoutes
Route::currentRout
eName();
Route::get('foo/ba
r',array('a
s'=>'
foobar',function
(){}));
RoutePrefixin
g
//Thisroutegrou
pwillcarryth
epr
efix'foo'
Route::group(array
('prefix'=>'f
oo')
,function(){})

Sub-DomainRou
ting
//{sub}willbep
assedtothecl
osur
e
Route::group(array
('domain'=>'{
sub}
.example.com'),f
unction()
{});

URLs
URL::full();
URL::current();
URL::previous();
URL::to('foo/bar',$parameters
,$secu
re);
URL::action('FooCo
ntroller@met
hod
',$
parameters,$abso
lute);
URL::route('foo',$parameters,$a
bsol
ute);
URL::secure('foo/b
ar',$parame
ter
s);
URL::asset('css/fo
o.css',$sec
ure
);
URL::secureAsset('
css/foo.css'
);
URL::isValidUrl('h
ttp://exampl
e.c
om')
;
URL::getRequest();
URL::setRequest($r
equest);
URL::getGenerator(
);
URL::setGenerator(
$generator);

Events
Event::fire('foo.b
ar',array($
bar
));
Event::listen('foo
.bar',funct
ion
($ba
r){});
Event::listen('foo
.*',functio
n($
bar)
{});
Event::listen('foo
.bar','FooH
and
ler'
,10);
Event::listen('foo
.bar','BarH
and
ler'
,5);
Event::listen('foo
r.bar',func
tio
n($e
vent){returnfal
se;});
Event::queue('foo'
,array($bar
));
Event::flusher('fo
o',function
($b
ar){
});
Event::flush('foo'
);
Event::subscribe(n
ewFooEventH
and
ler)
;

DB
$results=DB::sel
ect('select*f
romuserswhereid=?'
,array
('value')
);
DB::insert('insertintousers(id
,na
me)values(?,?)
',array(
1,'Dayle
'));
DB::update('updateuserssetv
ote
s=100wherename=?'
,array
('John'))
;
DB::delete('deletefromusers'
);
DB::statement('dro
ptableuser
s')
;
DB::listen(functio
n($sql,$bin
din
gs,$time){code_here
()});
DB::transaction(fu
nction(){co
de_
here
()});
Eloquent
Model::create(arra
y('key'=>'
val
ue')
);
Model::destroy(1);
Model::all();
Model::find(1);
//Triggeranexce
ption
Model::findOrFail(
1);
Model::where('foo'
,'=','bar'
)->
get(
);
Model::where('foo'
,'=','bar'
)->
firs
t();
//Exception
Model::where('foo'
,'=','bar'
)->
firs
tOrFail();
Model::where('foo'
,'=','bar'
)->
coun
t();
Model::where('foo'
,'=','bar'
)->
dele
te();
Model::whereRaw('f
oo=barandca
rs=2',array(20))->
get();
Model::on('connect
ion-name')->
fin
d(1)
;
Model::with('relat
ion')->get()
;
Model::all()->take
(10);
Model::all()->skip
(10);

SoftDelete
Model::withTrashed
()->where('c
ars
',2
)->get();
Model::withTrashed
()->where('c
ars
',2
)->restore();
Model::where('cars
',2)->force
Del
ete(
);
Model::onlyTrashed
()->where('c
ars
',2
)->get();

Events
Model::creating(fu
nction($mode
l){
});
Model::created(fun
ction($model
){}
);
Model::updating(fu
nction($mode
l){
});
Model::updated(fun
ction($model
){}
);
Model::saving(func
tion($model)
{})
;
Model::saved(funct
ion($model){
});
Model::deleting(fu
nction($mode
l){
});
Model::deleted(fun
ction($model
){}
);
Model::observe(newFooObserver
);

Mail
Mail::send('email.
view',$data
,funct
ion($message){});
Mail::send(array('
html.view','te
xt.v
iew'),$data,$ca
llback);
Mail::queue('email
.view',$dat
a,func
tion($message){})
;
Mail::queueOn('que
ue-name','e
mai
l.vi
ew',$data,$call
back);
Mail::later(5,'em
ail.view',$
dat
a,f
unction($message)
{});
//Writeallemailtologsins
tea
dofsending
Mail::pretend();

Queues
Queue::push('SendM
ail',array(
'me
ssag
e'=>$message));
Queue::push('SendE
mail@send',arr
ay('
message'=>$mess
age));
Queue::push(functi
on($job)use$i
d{}
);
phpartisanqueue:
listen
phpartisanqueue:
listenconne
cti
on
phpartisanqueue:
listen--tim
eou
t=60
phpartisanqueue:
work
Localization
App::setLocale('en
');
Lang::get('message
s.welcome');
Lang::get('message
s.welcome',arr
ay('
foo'=>'Bar'));
Lang::has('message
s.welcome');
Lang::choice('mess
ages.apples'
,10);

Files
File::exists('path
');
File::get('path');
File::getRemote('p
ath');
File::getRequire('
path');
File::requireOnce(
'path');
File::put('path','contents');
File::append('path
','data');
File::delete('path
');
File::move('path','target');
File::copy('path','target');
File::extension('p
ath');
File::type('path')
;
File::size('path')
;
File::lastModified
('path');
File::isDirectory(
'directory')
;
File::isWritable('
path');
File::isFile('file
');
//Findpathnamesmatchingagiv
enp
attern.
File::glob($patter
ns,$flag);
//Getanarrayofallfilesi
nadir
ectory.
File::files('direc
tory');
//Getallofthefilesfromt
hegive
ndirectory(recu
rsive).
File::allFiles('di
rectory');
//Getallofthedirectorieswit
hinagivendirectory
.
File::directories(
'directory')
;
File::makeDirector
y('path',$m
ode=0
777,$recursive=f
alse);
File::copyDirector
y('directory
','des
tination',$optio
ns=null
);
File::deleteDirect
ory('directo
ry'
,$p
reserve=false);
File::cleanDirecto
ry('director
y')
;

Input
Input::get('key');
//Defaultifthekeyismissi
ng
Input::get('key','default');
Input::has('key');
Input::all();
//Onlyretrieve'
foo'and'ba
r'whengettinginput
Input::only('foo','bar');
//Disregard'foo'whengettin
ginput
Input::except('foo
');
SessionInput(flash
)
//Flashinputtothesession
Input::flash();
Input::flashOnly('
foo','bar')
;
Input::flashExcept
('foo','baz
');
Input::old('key','
default_valu
e')
;

Files
//Useafilethat
'sbeenuplo
ade
d
Input::file('filen
ame');
//Determineifafilewasupl
oad
ed
Input::hasFile('fi
lename');
//Accessfilepro
perties
Input::file('name'
)->getRealPa
th(
);
Input::file('name'
)->getClient
Ori
gina
lName();
Input::file('name'
)->getSize()
;
Input::file('name'
)->getMimeTy
pe(
);
//Moveanuploade
dfile
Input::file('name'
)->move($des
tin
atio
nPath);
//Moveanuploade
dfile
Input::file('name'
)->move($des
tin
atio
nPath,$fileName)
;

Cache
Cache::put('key','value',$mi
nut
es);
Cache::add('key','value',$mi
nut
es);
Cache::forever('ke
y','value')
;
Cache::remember('k
ey',$minute
s,func
tion(){return'v
alue'});
Cache::rememberFor
ever('key',fun
ctio
n(){return'valu
e'});
Cache::forget('key
');
Cache::has('key');
Cache::get('key');
Cache::get('key','default');
Cache::get('key',function(){ret
urn'default';});
Cache::increment('
key');
Cache::increment('
key',$amoun
t);
Cache::decrement('
key');
Cache::decrement('
key',$amoun
t);
Cache::section('gr
oup')->put('
key
',$
value);
Cache::section('gr
oup')->get('
key
');
Cache::section('gr
oup')->flush
();

Cookies
Cookie::get('key')
;
//Createacookiethatlastsforeve
r
Cookie::forever('k
ey','value'
);
//Sendacookiew
itharespon
se
$response=Respon
se::make('He
lloWor
ld');
$response->withCoo
kie(Cookie::
mak
e('n
ame','value',$m
inutes));
Sessions
Session::get('key'
);
Session::get('key'
,'default')
;
Session::get('key'
,function()
{retur
n'default';});
Session::put('key'
,'value');
Session::all();
Session::has('key'
);
Session::forget('k
ey');
Session::flush();
Session::regenerat
e();
Session::flash('ke
y','value')
;
Session::reflash()
;
Session::keep(arra
y('key1','k
ey2
'));

Requests
Request::path();
Request::is('foo/*
');
Request::url();
Request::segment(1
);
Request::header('C
ontent-Type'
);
Request::server('P
ATH_INFO');
Request::ajax();
Request::secure();

Responses
returnResponse::m
ake($content
s);
returnResponse::m
ake($content
s,200)
;
returnResponse::j
son(array('k
ey'=>'value'));
returnResponse::j
son(array('k
ey'=>'value'))
->setCallback(Inp
ut::
get
('callback')
);
returnResponse::d
ownload($fil
epa
th);
returnResponse::d
ownload($fil
epa
th,$filename,$heade
rs);
//Createarespon
seandmodif
yahea
dervalue
$response=Respon
se::make($co
nte
nts,200);
$response->header(
'Content-Typ
e','ap
plication/json');
return$response;
//Attachacookietoarespon
se
returnResponse::m
ake($content
)
->withCookie(Cook
ie::
mak
e('key','va
lue'));

Redirects
returnRedirect::t
o('foo/bar')
;
returnRedirect::t
o('foo/bar')
->w
ith(
'key','value');
returnRedirect::t
o('foo/bar')
->w
ithI
nput(Input::get()
);
returnRedirect::t
o('foo/bar')
->w
ithI
nput(Input::excep
t('passwo
rd'));
returnRedirect::t
o('foo/bar')
->w
ithE
rrors($validator)
;
returnRedirect::b
ack();
returnRedirect::r
oute('foobar
');
returnRedirect::r
oute('foobar
',arra
y('value'));
returnRedirect::r
oute('foobar
',arra
y('key'=>'value
'));
returnRedirect::a
ction('FooCo
ntr
olle
r@index');
returnRedirect::a
ction('FooCo
ntr
olle
r@baz',array('va
lue'));
returnRedirect::a
ction('FooCo
ntr
olle
r@baz',array('ke
y'=>'va
lue'));
//Ifintendedred
irectisnotde
fine
d,defaultstofo
o/bar.
returnRedirect::i
ntended('foo
/ba
r');
IoC
App::bind('foo',f
unction($app
){retu
rnnewFoo;});
App::make('foo');
//Ifthisclasse
xists,it'sret
urne
d
App::make('FooBar'
);
App::singleton('fo
o',function
(){ret
urnnewFoo;});
App::instance('foo
',newFoo);
App::bind('FooRepo
sitoryInterf
ace
','
BarRepository');
App::register('Foo
ServiceProvi
der
');
//Listenforobje
ctresolutio
n
App::resolving(fun
ction($objec
t){
});

Security
P
asswor
ds
Hash::make('secr
etpassword');
Hash::check('sec
retpassword',$hashe
dPas
swor
d);
Hash::needsRehas
h($hashedPassword);

A
uth
//Checkiftheuserisloggedin
Auth::check();
Auth::user();
Auth::attempt(ar
ray('email'=>$emai
l,'
pass
word'=>$password
));
//Rememberuserlogin
Auth::attempt($c
redentials,true);
//Loginforasinglerequest
Auth::once($cred
entials);
Auth::login(User
::find(1));
Auth::loginUsing
Id(1);
Auth::logout();
Auth::validate($
credentials);
Auth::basic('use
rname');
Auth::onceBasic(
);
Password::remind
($credentials,funct
ion(
$mes
sage,$us
er){});

E
ncrypt
ion
Crypt::encrypt('
secretstring');
Crypt::decrypt($
encryptedString);
Crypt::setMode('
ctr');
Crypt::setCipher
($cipher);

Validation
Validator::make(
array('key'=>'F
oo')
,
array('key'=>'r
equi
red
|in:Foo')
);
Validator::extend(
'foo',funct
ion
($at
tribute,$value,$p
arams){
});
Validator::extend(
'foo','FooV
ali
dato
r@validate');
Validator::resolve
r(function($
tra
nsla
tor,$data,$rule
s,$msgs)
{
returnnewFooVal
idat
or(
$translator,$data,$rules
,$msgs);
});
ValidationRul
es
accepted
active_url
after:YYYY-MM-DD
before:YYYY-MM-DD
alpha
alpha_dash
alpha_num
between:1,10
confirmed
date
date_format:YYYY-M
M-DD
different:fieldnam
e
email
exists:table,colum
n
image
in:foo,bar,baz
not_in:foo,bar,baz
integer
numeric
ip
max:value
min:value
mimes:jpeg,png
regex:[0-9]
required
required_if:field,
value
required_with:foo,
bar,baz
required_without:f
oo,bar,baz
same:field
size:value
unique:table,colum
n,except,idC
olu
mn
url

Views
View::make('path/t
o/view');
View::make('foo/ba
r')->with('k
ey'
,'v
alue');
View::make('foo/ba
r',array('k
ey'=>'value'));
View::exists('foo/
bar');
//Shareavaluea
crossallvi
ews
View::share('key','value');
//Nestingviews
View::make('foo/ba
r')->nest('n
ame
','
foo/baz',$data);
//Registeraviewcomposer
View::composer('vi
ewname',fun
cti
on($
view){});
//Registermultipl
eviewstoaco
mpos
er
View::composer(arr
ay('view1','vi
ew2'
),function($view
){});
//Registeracomp
oserclass
View::composer('vi
ewname','Fo
oCo
mpos
er');
View::creator('vie
wname',func
tio
n($v
iew){});
BladeTemplate
s
@extends('layout.n
ame')
@section('name')/
/Beginase
cti
on
@stop//Endasec
tion
@show//Endasec
tionandthe
nshowit
@yield('name')//Showasecti
onnameinatemplate
@include('view.nam
e')
@include('view.nam
e',array('k
ey'=>'value'));
@lang('messages.na
me')
@choice('messages.
name',1);
@if
@else
@elseif
@endif
@unless
@endunless
@for
@endfor
@foreach
@endforeach
@while
@endwhile
{{$var}}//Echocontent
{{{$var}}}//Ec
hoescapedc
ont
ent
{{--BladeComment--}}

Forms
Form::open(array('
url'=>'foo
/ba
r','method'=>'PUT'
));
Form::open(array('
route'=>'f
oo.
bar'
));
Form::open(array('
route'=>ar
ray
('fo
o.bar',$paramete
r)));
Form::open(array('
action'=>'
Foo
Cont
roller@method'));
Form::open(array('
action'=>a
rra
y('F
ooController@meth
od',$par
ameter)))
;
Form::open(array('
url'=>'foo
/ba
r','files'=>true))
;
Form::token();
Form::model($foo,array('route
'=>ar
ray('foo.bar',$f
oo->bar))
);
Form::close;

FormElements
Form::label('id','Description
');
Form::label('id','Description
',arra
y('class'=>'foo
'));
Form::text('name')
;
Form::text('name',$value);
Form::textarea('na
me');
Form::textarea('na
me',$value)
;
Form::textarea('na
me',$value,ar
ray(
'class'=>'name'
));
Form::hidden('foo'
,$value);
Form::password('pa
ssword');
Form::email('name'
,$value,ar
ray
());
Form::file('name',array());
Form::checkbox('na
me','value'
);
Form::radio('name'
,'value');
Form::select('name
',array('ke
y'=>'
value'));
Form::select('name
',array('ke
y'=>'
value'),'key');
Form::submit('Subm
it!');
FormMacros
Form::macro('fooFi
eld',functi
on(
)
{return'<inputt
ype="custom"
/>'
;})
;
Form::fooField();

HTMLBuilder
HTML::macro('name'
,function()
{})
;
HTML::entities($va
lue);
HTML::decode($valu
e);
HTML::script($url,$attributes
);
HTML::style($url,$attributes)
;
HTML::link($url,'
title',$att
rib
utes
,$secure);
HTML::secureLink($
url,'title'
,$attr
ibutes);
HTML::linkAsset($u
rl,'title',$a
ttri
butes,$secure);
HTML::linkSecureAs
set($url,'t
itl
e',$attributes);
HTML::linkRoute($n
ame,'title'
,$para
meters,$attribut
es);
HTML::linkAction($
action,'tit
le'
,$p
arameters,$attri
butes);
HTML::mailto($emai
l,'title',$at
trib
utes);
HTML::email($email
);
HTML::ol($list,$a
ttributes);
HTML::ul($list,$a
ttributes);
HTML::listing($typ
e,$list,$a
ttr
ibut
es);
HTML::listingEleme
nt($key,$ty
pe,$va
lue);
HTML::nestedListin
g($key,$typ
e,$val
ue);
HTML::attributes($
attributes);
HTML::attributeEle
ment($key,$
val
ue);
HTML::obfuscate($v
alue);

Strings
//TransliterateaUTF-8valuetoASC
II
Str::ascii($value)
Str::camel($value)
Str::contains($hay
stack,$need
le)
Str::endsWith($hay
stack,$need
les
)
//Capastringwi
thasingleins
tanc
eofagivenvalu
e.
Str::finish($value
,$cap)
Str::is($pattern,$value)
Str::length($value
)
Str::limit($value,$limit=10
0,$end='...')
Str::lower($value)
Str::words($value,$words=10
0,$end='...')
Str::plural($value
,$count=2
)
//Generateamoretruly"rand
om"alp
ha-numericstring
.
Str::random($lengt
h=16)
//Generatea"ran
dom"alpha-n
ume
ricstring.
Str::quickRandom($
length=16)
Str::upper($value)
Str::title($value)
Str::singular($val
ue)
Str::slug($title,$separator='-
')
Str::snake($value,$delimiter='
_')
Str::startsWith($h
aystack,$ne
edl
es)
//Convertavaluetostudlyc
apscas
e.
Str::studly($value
)
Str::macro($name,$macro)
Helpers
A
rrays
array_add($array
,'key','value');
array_build($arr
ay,function(){});
array_divide($ar
ray);
array_dot($array
);
array_except($ar
ray,array('key'));
array_fetch($arr
ay,'key');
array_first($arr
ay,function($key,$
valu
e){}
,$def
aul
t);
//Stripskeysf
romthearray
array_flatten($a
rray);
array_forget($ar
ray,'foo');
//Dotnotation
array_forget($ar
ray,'foo.bar');
array_get($array
,'foo','default');
array_get($array
,'foo.bar','defaul
t');
array_only($arra
y,array('key'));
//Returnarrayofkey=>values
array_pluck($arr
ay,'key');
//Returnandre
move'key'fromarra
y
array_pull($arra
y,'key');
array_set($array
,'key','value');
//Dotnotation
array_set($array
,'key.subkey','val
ue')
;
array_sort($arra
y,function(){});
//Firstelementofanarray
head($array);
//Lastelementofanarray
last($array);

P
aths
app_path();
public_path();
//Approotpath
base_path();
storage_path();

S
trings
camel_case($valu
e);
class_basename($
class);
//Escapeastri
ng
e('<html>');
starts_with('Foobar.','Foo');
ends_with('Foob
ar.','bar.');
snake_case('fooB
ar');
str_contains('He
llofoobar.','foo'
);
//Result:foo/b
ar/
str_finish('foo/
bar','/');
str_is('foo*','
foobar');
str_plural('car'
);
str_random(25);
str_singular('ca
rs');
//Result:FooBa
r
studly_case('foo
_bar');
trans('foo.bar')
;
trans_choice('fo
o.bar',$count);
U
RLsan
dLi
nks
action('FooContr
oller@method',$para
mete
rs);
link_to('foo/bar
',$title,$attribut
es,$sec
ure);
link_to_asset('i
mg/foo.jpg',$title,$at
trib
utes,$se
cure);
link_to_route('r
oute.name',$title,$par
amet
ers,$
att
ributes);
link_to_action('
FooController@method
',$
titl
e,$pa
ram
s,$attrs
);
//HTMLLink
asset('img/photo
.jpg',$title,$attr
ibut
es);
//HTTPSlink
secure_asset('im
g/photo.jpg',$title
,$a
ttri
butes)
;
secure_url('path
',$parameters);
route($route,$p
arameters,$absolute=t
rue)
;
url('path',$par
ameters=array(),$
secu
re=null)
;

M
iscell
aneo
us
csrf_token();
dd($value);
value(function()
{return'bar';});
with(newFoo)->c
hainedMethod();

GoogleDocsDocumentSource:
https://docs.google.com/document/d/1NeCLL4fOgAmm4pYHIcBeWgCSCem5pqnGcwD_j4sNZyc/edit?usp=sharing

You might also like