Storing Data through Repository Error
-
Hello,
I have created a new package with name Blogs and Provider is Ebest. Below is my code:-
packages/Ebest/Blogs/src/Models/BlogCategory.php
use Illuminate\Database\Eloquent\Model; use Webkul\Core\Eloquent\TranslatableModel; use Kalnoy\Nestedset\NodeTrait; use Illuminate\Support\Facades\Storage; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Ebest\Blogs\Contracts\BlogCategory as BlogCategoryContract; use Ebest\Blogs\Repositories\BlogsCategoryRepository; class BlogCategory extends Model implements BlogCategoryContract { use NodeTrait; public $translatedAttributes = [ 'name', 'description', 'slug', 'url_path', 'meta_title', 'meta_description', 'meta_keywords', ]; protected $fillable = [ 'position', 'status', ]; protected $with = ['translations']; public function image_url() { if (! $this->image) return; return Storage::url($this->image); } public function getImageUrlAttribute() { return $this->image_url(); } }
packages/Ebest/Blogs/src/Models/BlogCategoryProxy.php
<?php namespace Ebest\Blogs\Models; use Konekt\Concord\Proxies\ModelProxy; class BlogCategoryProxy extends ModelProxy { }
packages/Ebest/Blogs/src/Contracts/BlogCategory.php
<?php namespace Ebest\Blogs\Contracts; interface BlogCategory { }
packages/Ebest/Blogs/src/Repositories/BlogCategoryRepository.php
<?php namespace Ebest\Blogs\Repositories; use Illuminate\Container\Container as App; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Event; use Webkul\Core\Eloquent\Repository; use Ebest\BLogs\Models\BlogCategory; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Facades\DB; class BlogsCategoryRepository extends Repository { /** * Specify Model class name * * @return mixed */ function model() { return 'Ebest\Blogs\Contracts\BlogCategory'; } public function create(array $data) { // Event::dispatch('catalog.category.create.before'); if (isset($data['locale']) && $data['locale'] == 'all') { $model = app()->make($this->model()); foreach (core()->getAllLocales() as $locale) { foreach ($model->translatedAttributes as $attribute) { if (isset($data[$attribute])) { $data[$locale->code][$attribute] = $data[$attribute]; $data[$locale->code]['locale_id'] = $locale->id; } } } } print_r($data); exit(); $category = $this->model->create($data); $this->uploadImages($data, $category); if (isset($data['attributes'])) { $category->filterableAttributes()->sync($data['attributes']); } // Event::dispatch('catalog.category.create.after', $category); return $category; } }
packages/Ebest/Blogs/src/Providers/ModuleServiceProvider.php
<?php namespace Ebest\Blogs\Providers; use Konekt\Concord\BaseModuleServiceProvider; class ModuleServiceProvider extends BaseModuleServiceProvider { protected $models = [ Ebest\Blogs\Models\BlogCategory::class, ]; }
config/concord.php
<?php return [ 'modules' => [ /** * Example: * VendorA\ModuleX\Providers\ModuleServiceProvider::class, * VendorB\ModuleY\Providers\ModuleServiceProvider::class * */ \Webkul\Attribute\Providers\ModuleServiceProvider::class, \Webkul\BookingProduct\Providers\ModuleServiceProvider::class, \Webkul\Category\Providers\ModuleServiceProvider::class, \Webkul\Checkout\Providers\ModuleServiceProvider::class, \Webkul\Core\Providers\ModuleServiceProvider::class, \Webkul\Customer\Providers\ModuleServiceProvider::class, \Webkul\Inventory\Providers\ModuleServiceProvider::class, \Webkul\Product\Providers\ModuleServiceProvider::class, \Webkul\Sales\Providers\ModuleServiceProvider::class, \Webkul\Tax\Providers\ModuleServiceProvider::class, \Webkul\User\Providers\ModuleServiceProvider::class, \Webkul\CatalogRule\Providers\ModuleServiceProvider::class, \Webkul\CartRule\Providers\ModuleServiceProvider::class, \Webkul\CMS\Providers\ModuleServiceProvider::class, \Webkul\Velocity\Providers\ModuleServiceProvider::class, \Webkul\SocialLogin\Providers\ModuleServiceProvider::class, \Ebest\Blogs\Providers\ModuleServiceProvider::class, ] ];
Whenever i am running the project it gives error as: "
Class Ebest\Blogs\Providers\Ebest\Blogs\Models\BlogCategory must extend or implement Ebest\Blogs\Providers\Ebest\Blogs\Contracts\BlogCategory. at D:\xampp\htdocs\bagisto\vendor\konekt\concord\src\Concord.php:126 122| */ 123| public function registerModel(string $abstract, string $concrete, $registerRouteModel = true) 124| { 125| if (!is_subclass_of($concrete, $abstract, true)) { > 126| throw new InvalidArgumentException("Class {$concrete} must extend or implement {$abstract}. "); 127| } 128| 129| $this->models[$abstract] = $concrete; 130| $this->app->alias($concrete, $abstract); 1 D:\xampp\htdocs\bagisto\vendor\konekt\concord\src\BaseServiceProvider.php:262 Konekt\Concord\Concord::registerModel("Ebest\Blogs\Providers\Ebest\Blogs\Contracts\BlogCategory", "Ebest\Blogs\Providers\Ebest\Blogs\Models\BlogCategory") 2 D:\xampp\htdocs\bagisto\vendor\konekt\concord\src\BaseServiceProvider.php:98 Konekt\Concord\BaseServiceProvider::registerModels() D:\xampp\htdocs\bagisto>ss Ebest\Blogs\Providers\Ebest\Blogs\Models\BlogCategory must extend or
Please Help.
Thanking You -
Hi @himanshu-kmr,
Just run
php artisan config:cache
. -
I tried several time by optimizing and also clearing the cache. But still problem is there...
-
Hi @himanshu-kmr,
Look at this namespace
Ebest\Blogs\Providers\Ebest\Blogs\Models\BlogCategory
. Something is wrong with this namespace. It should be like thisEbest\Blogs\Models\BlogCategory
.Please check the namespace. A namespace is not correct.
-
@devansh-webkul said in Storing Data through Repository Error:
BlogCategory
In the BlogCategory model the name space is namespace Ebest\Blogs\Models;
-
Hi @himanshu-kmr,
If you are sure that namespace is correct then do one thing. Go to
bootstrap/cache
folder and delete all files inside that.After that run
composer dump-autoload
and thenphp artisan optimize
.If still facing any issue then check each file and namespace because it is a namespace issue check that errors it's clearly specifying the wrong namespace.
-
@devansh-webkul Thankyou. The problem was in ModuleServiceProvider
I changed
protected $models = [ Ebest\Blogs\Models\BlogCategory::class, ];
to
protected $models = [
\Ebest\Blogs\Models\BlogCategory::class,
];This problem has been resolved.
Now if i am running the project i am getting error as
Class 'Ebest\Blogs\Models\BlogCategoryProxy ' not found
at D:\xampp\htdocs\bagisto\vendor\konekt\concord\src\Concord.php:269