Source: http://laraveldaily.com/
Tip 26 Artisan command parameters.
In the process of creating a new command with artisan , you can request the input in a number of ways such as $ this-> confirm (), $ this-> anticipate (), $ this-> choice (). as follows
1 2 3 4 5 6 7 8 9 10 11 | <span class="token comment">// Yes or no?</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">confirm</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'Do you wish to continue?'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Open question with auto-complete options</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">anticipate</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'What is your name?'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'Taylor'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Dayle'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// One of the listed options with default index</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">choice</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'What is your name?'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'Taylor'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Dayle'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token variable">$defaultIndex</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tip 27 Preview mailables.
If you use Mailables to send email, you can preview the results without sending the mail, which can be identified on the brosser,
1 2 3 4 5 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/mailable'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$invoice</span> <span class="token operator">=</span> App <span class="token package">Invoice</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">App Mail InvoicePaid</span> <span class="token punctuation">(</span> <span class="token variable">$invoice</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tip 28 Route :: view (), don’t create a Controller.
If in your Controller function, only returns the view, then it may not use the controller.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token comment">// Instead of this</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'about'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// And this</span> <span class="token keyword">class</span> <span class="token class-name">TextsController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">about</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'texts.about'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// Do this</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'about'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'texts.about'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In fact, in the project, all must write to the controller, because currently, can only return the view, however, if adding some logical processing, such as adding policies, then it takes effort to write to the controller.
Tip 29 Blade @auth
Instead of using the if structure to check if the user is logged in or not, in the blade you can use the @auth directive.
1 2 3 4 | @ <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">user</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment">// The user is authenticated.</span> @ <span class="token keyword">endif</span> |
Shorter spelling
1 2 3 4 | @auth <span class="token comment">// The user is authenticated.</span> @endauth |
There is also an @guest directive, which is for un logged in users
1 2 3 4 | @guest <span class="token comment">// The user is not authenticated.</span> @endguest |
Tip 30 Model all: columns
While using the :: all of Model, we can specify which columns are retrieved
1 2 3 | $users = User::all(); // normal case $users = User::all(['id', 'name', 'email']); |
Note: this tip is also used with the get () function of Eloquent Model
Tip 31 Localhost in .env
Don’t forget to change the APP_URL variable in the .env file from http: // localhost to the actual URL. It is the main cause leading to some errors of invalid path cases.
1 2 3 4 5 6 | <span class="token constant">APP_NAME</span> <span class="token operator">=</span> Laravel <span class="token constant">APP_ENV</span> <span class="token operator">=</span> local <span class="token constant">APP_KEY</span> <span class="token operator">=</span> base64 <span class="token punctuation">:</span> <span class="token number">9</span> PHz3TL5C4YrdV6Gg <span class="token operator">/</span> Xkkmx9btaE93j7rQTUZWm2MqU <span class="token operator">=</span> <span class="token constant">APP_DEBUG</span> <span class="token operator">=</span> <span class="token boolean constant">true</span> <span class="token constant">APP_URL</span> <span class="token operator">=</span> http <span class="token punctuation">:</span> <span class="token comment">//localhost</span> |
Tip 32 What’s behind the routes?
If you want to know the actions behind routes, and really want to understand the mechanism behind the basic route commands. For example, behind what are Auth :: routes . For versions from Laravel 7 and above, check the file /vendor/laravel/ui/src/AuthRouteMethods.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$options</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Authentication Routes...</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'login'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Auth <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'login'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'login'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Auth <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'logout'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Auth <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'logout'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Registration Routes...</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$options</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token operator">?</span> <span class="token boolean constant">true</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Auth <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Auth <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Password Reset Routes...</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$options</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'reset'</span> <span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token operator">?</span> <span class="token boolean constant">true</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">resetPassword</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Password Confirmation Routes...</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$options</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'confirm'</span> <span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token operator">?</span> <span class="token function">class_exists</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">prependGroupNamespace</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'AuthConfirmPasswordController'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">confirmPassword</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Email Verification Routes...</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$options</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'verify'</span> <span class="token punctuation">]</span> <span class="token operator">?</span> <span class="token operator">?</span> <span class="token boolean constant">false</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">emailVerification</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
On lower versions Laravel 7.0 can be checked at /vendor/laravel/framework/src/illuminate/Routing/Router.php.
Tip 33 To Fail
Along with the findOrFail () method , Eloquent also provides the firstOrFail () method , which will return the first record that meets the condition, or return to the 404 page if no records match. The difference between them is that while findOrFail requires an id parameter, firstOrFail () is often used in queries.
1 2 3 | <span class="token variable">$user</span> <span class="token operator">=</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">findOrFail</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// trả về user có id = 1 hoặc trang 404 nếu không có bản ghi nào thỏa mãn. </span> <span class="token variable">$user</span> <span class="token operator">=</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereEmail</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">firstOrFail</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// trả về bản ghi đầu tiên thỏa mãn điều kiện có email là <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> hoặc trả về trang 404 nếu không có bản ghi nào thỏa mãn. </span> |
Tip 34 Change column names
In Eloquent Query Builder to change the name of the returned column, just like SQL can use as .
1 2 3 4 | <span class="token variable">$users</span> <span class="token operator">=</span> <span class="token constant">DB</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">table</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'users'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">select</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'email as user_email'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tip 35 Log with the parameters.
Log :: info can be used with the parameter passed to better know exactly what happened.
1 2 | Log <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">info</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'User failed to login.'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'id'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |