خطای لاراول: Call to undefined method
مشکل
بسته به پیکربندی انکودینگ (encoding) سرور شما، با این خطا مواجه خواهید شد:
Call to undefined method Illuminate\Routing\ResourceRegistrar::addResource�ndex()
یا
Call to undefined method Illuminate\Routing\ResourceRegistrar::addResource?ndex()
توضیحات
این مشکل به انکودینگ (encoding) سرور مربوط میشود که به طور کامل بر روی حالت UTF-8 تنظیم نشده است. این یک مشکل رایج در
فریمورک لاراول (Laravel) است که به زبان ترکی (یا زبانهای دیگری که در آنها حرف بزرگ کاراکتر «i» مقدار متفاوتی دارد)
مربوط میشود.
خطوط کد مربوط به این موضوع را میتوان در فریمورک لاراول و در فایل زیر پیدا کرد:
/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php
<?php
namespace Illuminate\Routing;use Illuminate\Support\Str;
class ResourceRegistrar{
...
/**
* The default actions for a resourceful controller.
*
* @var array
*/
protected $resourceDefaults = ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy'];
...
/**
* Route a resource to a controller.
*
* @param string $name
* @param string $controller
* @param array $options
* @return \Illuminate\Routing\RouteCollection
*/
public function register($name, $controller, array $options = [])
{
...
foreach ($this->getResourceMethods($defaults, $options) as $m) {
$collection->add($this->{'addResource'.ucfirst($m)}(
$name, $base, $controller, $options
)
);
}
...
}
...
}
راهحل
شما باید منابع سرور خود (شامل Apache، PHP، MySQL) را طوری پیکربندی کنید که فقط با انکودینگ UTF-8 کار کنند (یا فقط از انکودینگ UTF-8 پشتیبانی کنند).
همچنین، تمام فایلهای ویرایش شده باید با فرمت UTF-8 without BOM انکود شوند.
موفق باشید!