不要忘記將 .env
文件中的 app_url
從 http://localhost
中改為真實(shí)的 URL,因?yàn)樗鼘⑹悄汶娮余]件通知和其他地方的任何鏈接的基礎(chǔ)。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:9PHz3TL5C4YrdV6Gg/Xkkmx9btaE93j7rQTUZWm2MqU=
APP_DEBUG=true
APP_URL=http://localhost
不是關(guān)于 Laravel ,而是… 永遠(yuǎn)不要在生產(chǎn)服務(wù)器上運(yùn)行 composer update
,它很慢,會(huì) “破壞” 存儲(chǔ)庫(kù)。始終在你電腦上本地運(yùn)行 composer update
,將新的 composer.lock
提交到存儲(chǔ)庫(kù),然后再在生產(chǎn)服務(wù)器運(yùn)行 composer install
。
如果你想找出 composer.json
包中已經(jīng)發(fā)布的較新版本,直接運(yùn)行 composer outdated
。你會(huì)得到一個(gè)包含所有信息的完整列表,如下所示。
phpdocumentor/type-resolver 0.4.0 0.7.1
phpunit/php-code-coverage 6.1.4 7.0.3 Library that provides collection, processing, and rende...
phpunit/phpunit 7.5.9 8.1.3 The PHP Unit Testing framework.
ralouphie/getallheaders 2.0.5 3.0.3 A polyfill for getallheaders.
sebastian/global-state 2.0.0 3.0.0 Snapshotting of global state
在翻譯文件中(resources/lang
),你不僅可以指定變量為 :variable
,也可以指定大寫為 :VARIABLE
或 :Variable
,然后你傳遞的值也會(huì)自動(dòng)大寫。
// 翻譯配置路徑:resources/lang/en/messages.php
'welcome' => 'Welcome, :Name'
// 返回結(jié)果:"Welcome, Taylor"
echo __('messages.welcome', ['name' => 'taylor']);
如果你想有當(dāng)前日期不包含秒或者分鐘,用定時(shí)器的方法比如:setSeconds(0)
或者 setMinutes(0)
。
// 2020-04-20 08:12:34
echo now();
// 2020-04-20 08:12:00
echo now()->setSeconds(0);
// 2020-04-20 08:00:00
echo now()->setSeconds(0)->setMinutes(0);
// 另外一種更短的方式
// 2020-04-20 08:00:00
echo now()->startOfHour();
如果你想創(chuàng)建一個(gè)只有一個(gè)動(dòng)作的控制器,你可以使用 __invoke()
方法創(chuàng)建「可調(diào)用(invokable)」控制器。
路由:
Route::get('user/{id}', 'ShowProfile');
Artisan 命令:
php artisan make:controller ShowProfile --invokable
控制器:
class ShowProfile extends Controller
{
public function __invoke($id)
{
return view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
你不僅可以跳轉(zhuǎn) redirect()
到 URL 或特定的路由,而且可以跳轉(zhuǎn)到一個(gè)特定的控制器里的特定方法,甚至向其傳遞參數(shù)。像這樣:
return redirect()->action('SomeController@method', ['param' => $value]);
如果你想用舊版本而非新版本的 Laravel,使用這個(gè)命令:
composer create-project --prefer-dist laravel/laravel project "7.*"
將 7.* 更改為任何你想要的版本。
在默認(rèn)的分頁(yè)鏈接中,你可以傳遞其他參數(shù),保留原始的查詢字符串,甚至指向一個(gè)特定的 #xxxxx
錨點(diǎn)。
{{ $users->appends(['sort' => 'votes'])->links() }}
{{ $users->withQueryString()->links() }}
{{ $users->fragment('foo')->links() }}
如果你有一個(gè)需要多次重復(fù)調(diào)用的回調(diào)函數(shù),你可以將其聲明在一個(gè)變量中,然后反復(fù)使用它。
$userCondition = function ($query) {
$query->where('user_id', auth()->id());
};
// 獲取該用戶包含有評(píng)論的文章
// 返回該用戶的評(píng)論
$articles = Article::with(['comments' => $userCondition])
->whereHas('comments', $userCondition)
->get();
你不僅可以使用 $request->has()
方法來查看一個(gè)參數(shù),而且可以使用 $request->hasAny()
來查看傳入的多個(gè)參數(shù)。
public function store(Request $request)
{
if ($request->hasAny(['api_key', 'token'])) {
echo '我們傳入了api_key';
} else {
echo '缺少認(rèn)證必要參數(shù)';
}
}
在分頁(yè)組件中,如果你只需要「上一頁(yè) / 下一頁(yè)」的鏈接,而不是需要所有頁(yè)碼,也因此可以使用更少的數(shù)據(jù)庫(kù)查詢,你只需要將 paginate()
更改為 simplePaginate()
。
// 全部頁(yè)碼的分頁(yè)組件
$users = User::paginate(10);
// 或者你可以這樣做
$users = User::simplePaginate(10);
如果你有一個(gè)具有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的數(shù)組,例如帶對(duì)象嵌套的數(shù)組,你可以使用 data_get()
助手函數(shù)配合通配符和「點(diǎn)」符號(hào),來從嵌套數(shù)組或?qū)ο笾袡z索值。
// 我們有如下數(shù)組
[
0 =>
['user_id' =>'用戶id1', 'created_at' => '時(shí)間戳1', 'product' => {object Product}, ...],
1 =>
['user_id' =>'用戶id2', 'created_at' => '時(shí)間戳2', 'product' => {object Product}, ...],
2 => ...
]
// 現(xiàn)在我們想要獲取其中全部的產(chǎn)品id,我們可以這樣寫:
data_get($yourArray, '*.product.id');
// 這樣我們就獲取了全部的產(chǎn)品 id [1, 2, 3, 4, 5, ...]
Laravel 8.51 新增 @class
指令,用于添加控制 CSS 類的真 / 假條件??梢栽?a rel="external nofollow" target="_blank" target="_blank">此文檔中了解更多。
之前:
<div class="@if ($active) underline @endif">`
現(xiàn)在:
<div @class(['underline' => $active])>
@php
$isActive = false;
$hasError = true;
@endphp
<span @class([
'p-4',
'font-bold' => $isActive,
'text-gray-500' => ! $isActive,
'bg-red' => $hasError,
])></span>
<span class="p-4 text-gray-500 bg-red"></span>
在文檔中,「作業(yè)」是在「隊(duì)列」章節(jié)進(jìn)行討論的,但是你可以脫離隊(duì)列來使用「作業(yè)」,就像傳統(tǒng)的委托任務(wù)的類一樣。只需在控制器中調(diào)用 $this->dispatchNow()
即可。
public function approve(Article $article)
{
//
$this->dispatchNow(new ApproveArticle($article));
//
}
如果你想要生成一些假數(shù)據(jù),你可以在模型工廠或 Seeds 中,甚至任何類的外部使用 Faker
。
注意:要在生產(chǎn)模式 production 中使用它的話,你需要在 composer.json
中,將 faker
從 "require-dev"
移動(dòng)到 "require"
中。
use Faker;
class WhateverController extends Controller
{
public function whatever_method()
{
$faker = Faker\Factory::create();
$address = $faker->streetAddress;
}
}
你可以讓一些事情以每小時(shí)、每天,或是其他時(shí)間模式執(zhí)行。
你可以安排 artisan 命令、作業(yè)類、可調(diào)用類、回調(diào)函數(shù)、甚至是 shell 腳本去定時(shí)執(zhí)行。
use App\Jobs\Heartbeat;
$schedule->job(new Heartbeat)->everyFiveMinutes();
$schedule->exec('node /home/forge/script.js')->daily();
use App\Console\Commands\SendEmailsCommand;
$schedule->command('emails:send Taylor --force')->daily();
$schedule->command(SendEmailsCommand::class, ['Taylor', '--force'])->daily();
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
DB::table('recent_users')->delete();
})->daily();
}
如果你想使用一些關(guān)鍵詞來檢索 Laravel 文檔,默認(rèn)情況下只會(huì)給出 5 個(gè)結(jié)果?;蛟S還能給出更多結(jié)果。
如果你想要看全部的結(jié)果,你可以前往 Laravel 文檔 的 Github 倉(cāng)庫(kù) 直接搜索。
Laravel 8.34 新增: php artisan route:list
獲得了新的參數(shù) --except-path
,你可以把一些你不想看見的路由過濾掉。
如果你在不同的 Blade 文件中格式化數(shù)據(jù),可以嘗試創(chuàng)建自己的 Blade 指令。
下面這一段是來自 Laravel Cashier 包的例子:
"require": {
"laravel/cashier": "^12.9",
}
public function boot()
{
Blade::directive('money', function ($expression) {
return "<?php echo Laravel\Cashier\Cashier::formatAmount($expression, config('cashier.currency')); ?>";
});
}
<div>Price: @money($book->price)</div>
@if($book->discount_price)
<div>Discounted price: @money($book->dicount_price)</div>
@endif
如果您不確定某些 Artisan 命令的參數(shù),或者您想知道可用的參數(shù),只需鍵入 php artisan help [命令]
。
更多建議: