Laravel5 Carbon日期字符串未正确解析

时间:2015-08-16 22:38:28

标签: php laravel date laravel-5 php-carbon

我已经在这个问题上挣扎了四个多小时了。 Laravel的Carbon约会并不适合搭配Bootstrap等。

我一直试图为文章模型设置一个mutator

public function setPublishedAtAttribute($date){    
    $this->attributes['published_at'] = Carbon::createFromFormat($date); 
}

在文章模型中,我已经包含use Carbon\Carbon;。此时,我有一个Bootstrap日期选择器:

 <div class="form-group">
{!! Form::label('published_at', 'Publish On:') !!}
{!! Form::input('date', 'published_at', date('Y-m-d'),[ 'class' => 'form-control']) !!}
 </div>

我的错误日志抛出了这个:

[2015-08-16 22:32:36] production.ERROR: exception 'InvalidArgumentException' with message 'Trailing data' in /Users/alexanderkleinhans/Misc/laravel_test/laravel/vendor/nesbot/carbon/src/Carbon/Carbon     .php:414

巨大的堆栈痕迹:

#0 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Article.php(17): Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))
#1 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(10577): App\Article->setPublishedAtAttribute(Object(Carbon\Carbon))
#2 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9615): Illuminate\Database\Eloquent\Model->setAttribute('published_at', Object(Carbon\Carbon))
#3 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9553): Illuminate\Database\Eloquent\Model->fill(Array)
#4 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9665): Illuminate\Database\Eloquent\Model->__construct(Array)
#5 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Http/Controllers/ArticlesController.php(36): Illuminate\Database\Eloquent\Model::create(Array)
#6 [internal function]: App\Http\Controllers\ArticlesController->store()
#7 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8490): call_user_func_array(Array, Array)
#8 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8559): Illuminate\Routing\Controller->callAction('store', Array)
#9 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8539): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\ArticlesController), Object(Illuminate\Routing\Route), 'store')
#10 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#11 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#14 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8540): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#15 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(8525): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\ArticlesController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'store')
#16 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7500): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'App\\Http\\Contro...', 'store')
#17 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7471): Illuminate\Routing\Route->runWithCustomDispatcher(Object(Illuminate\Http\Request))
#18 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7124): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#19 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#20 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#21 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#23 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7125): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#24 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7113): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#25 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(7098): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#26 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2088): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#27 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#28 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9196): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#29 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2708): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#32 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12456): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#35 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(11104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#38 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12193): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#41 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(12132): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#44 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2758): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9188): call_user_func_array(Array, Array)
#47 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(9178): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#49 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2035): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#50 /Users/alexanderkleinhans/Misc/laravel_test/laravel/bootstrap/cache/compiled.php(2018): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#51 /Users/alexanderkleinhans/Misc/laravel_test/laravel/public/index.php(60): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#52 /Users/alexanderkleinhans/Misc/laravel_test/laravel/server.php(21): require_once('/Users/alexande...')
#53 {main}  

有趣的是:

public function setPublishedAtAttribute($date){
    $this->attributes['published_at'] = Carbon::parse($date);
}

会工作,但完全没用。它会正确记录日期,但它是当前日期。我不记得使用Carbon::now(),所以日期必须来自Boostrap?即使我将Bootstraps日期选择器设置为其他东西,也没有注册。

我已经梳理过这件事,浪费了足够的时间。提前致谢。

EDIT。我面对面发现Carbon和Laravel不是问题,事实上,parse($date),尽管可能比createFromFormat的开销稍微高一些。对于踢球,我试过

public function setPublishedAtAttribute($date){    
    $this->attributes['published_at'] = Carbon::parse($date); 
    $this->attributes['body'] = $date; 
}

就这样,我可以看到它是什么。 Bootstrap实际上是问题所在。

1 个答案:

答案 0 :(得分:2)

您收到此错误的原因是您错误地设置了 published_at Carbon :: createFromFormat()要求第二个参数为字符串,但您传递的是Carbon对象。

这就是你在堆栈跟踪中可以看到的内容:

#0 /Users/alexanderkleinhans/Misc/laravel_test/laravel/app/Article.php(17): Carbon\Carbon::createFromFormat('Y-m-d', Object(Carbon\Carbon))
相关问题