PHP code example of macropay-solutions / laravel-crud-wizard-free

1. Go to this page and download the library: Download macropay-solutions/laravel-crud-wizard-free library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

macropay-solutions / laravel-crud-wizard-free example snippets


      return new class (
          $query,
          $farParent,
          $throughParent,
          $firstKey,
          $secondKey,
          $localKey,
          $secondLocalKey,
          $this // this is crucial
      ) extends HasManyThrough {
          public function __construct(
              Builder $query,
              Model $farParent,
              Model $throughParent,
              string $firstKey,
              string $secondKey,
              string $localKey,
              string $secondLocalKey,
              BaseModel $resourceModel
          ) {
              $this->setConstraintsStaticFlag($resourceModel);

              return parent::__construct(
                  $query,
                  $farParent,
                  $throughParent,
                  $firstKey,
                  $secondKey,
                  $localKey,
                  $secondLocalKey
              );
          }
      };

    class DbCrudMap
    {
        public const MODEL_FQN_TO_CONTROLLER_MAP = [
            BaseModelChild::class => ResourceControllerTraitIncludedChild::class,
            ...
        ];
    }

    protected array $relatedModelFqnToControllerMap = [
        RelatedBaseModelChild::class => RelatedResourceControllerTraitIncludedChild::class,
    ];

#OperationModel example for BaseModelFrozenAttributes
    public function getFrozen(): OperationFrozenAttributes
    {
        return parent::getFrozen(); // this is needed for autocompletion and will tes((clone $this)->forceFill($this->attributesToArray())); 
    }

#OperationService example for BaseModelAttributes and BaseModelFrozenAttributes
    public function someFunction(): void
    {
         // BaseModelAttributes
         echo $this->model-a->value; // has autocomplete - will print for example 1
         echo $this->model-a->value = 10; // has autocomplete - will print 10
         echo $this->model->value; // has autocomplete - will print 10

         // BaseModelFrozenAttributes
         $dto = $this->model->getFrozen();
         echo $dto->client_id; // has autocomplete - will print for example 1
         $dto->client_id = 4; // Exception: Dynamic properties are forbidden.

         if (isset($dto->client)) {
             /** @var ClientFrozenAttributes $client */
             // $client will be an stdClass that has autocomplete like a ClientFrozenAttributes
             $client = $dto->client;
             echo $client->name; // has autocomplete - will print for example 'name'
             $client->name = 'text'; // NO Exception
             echo $client->name; // will print 'text'
             // $client changes can happen, but they will not be persisted in the $dto ($client is a stdClass clone)
             echo $dto->client->name; // will print 'name'
             echo $dto->client->name = 'text'; // will print 'text'
             echo $dto->client->name; // will print 'name'
         }

         foreach (($dto->products ?? []) as $k => $product) {
             /** @var ProductFrozenAttributes $product */
             // $product will be an stdClass that has autocompletes like a ProductFrozenAttributes
             echo $product->value; // has autocomplete - will print for example 1
             $product->value = 2; // NO Exception
             echo $product->value; // will print 2
             // $product changes can happen, but they will not be persisted in the $dto ($product is a stdClass clone)
             echo $dto->products[$k]->value; // will print 1
             echo $dto->products[$k]->value = 2; // will print 2
             echo $dto->products[$k]->value; // will print 1
         }
    }

    try {
        foreach (
            ResourceHelper::getResourceNameToControllerFQNMap(DbCrudMap::MODEL_FQN_TO_CONTROLLER_MAP) as $resource => $controller
        ) {
            Route::get('/' . $resource, [$controller, 'list'])->name('apiinfo.list_' . $resource);
            Route::post('/' . $resource . '/l/i/s/t', [$controller, 'list'])->name('apiinfo.post_list_' . $resource);
            Route::post('/' . $resource, [$controller, 'create'])->name('apiinfo.create_' . $resource);
            Route::put('/' . $resource . '/{identifier}', [$controller, 'update'])->name('apiinfo.update_' . $resource);
            Route::get('/' . $resource . '/{identifier}', [$controller, 'get'])->name('apiinfo.get_' . $resource);
            Route::delete('/' . $resource . '/{identifier}', [$controller, 'delete'])->name('apiinfo.delete_' . $resource);
            // Route::match(['post', 'get'], '/' . $resource . '/{identifier}/{relation}', [$controller, 'listRelation']); // paid version only
            Route::get('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [$controller, 'getRelated']);
            Route::put('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [$controller, 'updateRelated']);
            Route::delete('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [$controller, 'deleteRelated']);

        }
    } catch (Throwable $e) {
        \Illuminate\Support\Facades\Log::error($e->getMessage());
    }


    try {
        foreach (
            ResourceHelper::getResourceNameToControllerFQNMap(
                DbCrudMap::MODEL_FQN_TO_CONTROLLER_MAP
            ) as $resource => $controllerFqn
        ) {
            $controllerFqnExploded = \explode('\\', $controllerFqn);
            $controller = \end($controllerFqnExploded);
            //$router->get('/' . $resource . '/{identifier}/{relation}', [
            //    'as' => $resource . '.listRelation',
            //    'uses' => $controller . '@listRelation',
            //]); // paid version only
            $router->get('/' . $resource, [
                'as' => $resource . '.list',
                'uses' => $controller . '@list',
            ]);
            //$router->post('/' . $resource . '/{identifier}/{relation}', [
            //    'as' => $resource . '.post_listRelation',
            //    'uses' => $controller . '@listRelation',
            //]); // paid version only
            $router->post('/' . $resource . '/l/i/s/t', [
                'as' => $resource . '.post_list',
                'uses' => $controller . '@list',
            ]);
            $router->post('/' . $resource, [
                'as' => $resource . '.create',
                'uses' => $controller . '@create',
            ]);
            $router->put('/' . $resource . '/{identifier}', [
                'as' => $resource . '.update',
                'uses' => $controller . '@update',
            ]);
            $router->get('/' . $resource . '/{identifier}', [
                'as' => $resource . '.get',
                'uses' => $controller . '@get',
            ]);
            $router->delete('/' . $resource . '/{identifier}', [
                'as' => $resource . '.delete',
                'uses' => $controller . '@delete',
            ]);

            $router->get('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [
                'as' => $resource . '.getRelated',
                'uses' => $controller . '@getRelated',
            ]);
            $router->put('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [
                'as' => $resource . '.updateRelated',
                'uses' => $controller . '@updateRelated',
            ]);
            $router->delete('/' . $resource . '/{identifier}/{relation}/{relatedIdentifier}', [
                'as' => $resource . '.deleteRelated',
                'uses' => $controller . '@deleteRelated',
            ]);
        }
    } catch (Throwable $e) {
        \Illuminate\Support\Facades\Log::error($e->getMessage());
    }