mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73b1012b92 | ||
|
|
ca94ffd99a | ||
|
|
c1ddd30532 | ||
|
|
dcbe6c953f | ||
|
|
867a6fd9b4 | ||
|
|
39a96c3b95 | ||
|
|
057efb0ee7 | ||
|
|
1010cdbd26 | ||
|
|
9fe65e7ed3 | ||
|
|
16a4297992 |
+15
-1
@@ -2,9 +2,23 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.9.3...master)
|
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.10.0...master)
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
2021-04-09, 2.10.0
|
||||||
|
------------------
|
||||||
|
### Added
|
||||||
|
- Allowing Methods to be set or unset in ModelHooks [\#1198 / jenga201](https://github.com/barryvdh/laravel-ide-helper/pull/1198)\
|
||||||
|
Note: the visibility of `\Barryvdh\LaravelIdeHelper\Console\ModelsCommand::setMethod` has been changed to **public**!
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixing issue where incorrect autoloader unregistered [\#1210 / tezhm](https://github.com/barryvdh/laravel-ide-helper/pull/1210)
|
||||||
|
|
||||||
|
2021-04-02, 2.9.3
|
||||||
|
-----------------
|
||||||
|
### Fixed
|
||||||
|
- Support both customized namespace factories as well as default resolvable ones [\#1201 / wimski](https://github.com/barryvdh/laravel-ide-helper/pull/1201)
|
||||||
|
|
||||||
2021-04-01, 2.9.2
|
2021-04-01, 2.9.2
|
||||||
-----------------
|
-----------------
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -301,6 +301,8 @@ class MyCustomHook implements ModelHookInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$command->setProperty('custom', 'string', true, false, 'My custom property');
|
$command->setProperty('custom', 'string', true, false, 'My custom property');
|
||||||
|
$command->unsetMethod('method');
|
||||||
|
$command->setMethod('method', $command->getMethodType($model, '\Some\Class'), ['$param']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class MetaCommand extends Command
|
|||||||
// Needs to run before exception handler is registered
|
// Needs to run before exception handler is registered
|
||||||
$factories = $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [];
|
$factories = $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [];
|
||||||
|
|
||||||
$this->registerClassAutoloadExceptions();
|
$ourAutoloader = $this->registerClassAutoloadExceptions();
|
||||||
|
|
||||||
$bindings = [];
|
$bindings = [];
|
||||||
foreach ($this->getAbstracts() as $abstract) {
|
foreach ($this->getAbstracts() as $abstract) {
|
||||||
@@ -106,7 +106,7 @@ class MetaCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->unregisterClassAutoloadExceptions();
|
$this->unregisterClassAutoloadExceptions($ourAutoloader);
|
||||||
|
|
||||||
$content = $this->view->make('meta', [
|
$content = $this->view->make('meta', [
|
||||||
'bindings' => $bindings,
|
'bindings' => $bindings,
|
||||||
@@ -143,12 +143,16 @@ class MetaCommand extends Command
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Register an autoloader the throws exceptions when a class is not found.
|
* Register an autoloader the throws exceptions when a class is not found.
|
||||||
|
*
|
||||||
|
* @return callable
|
||||||
*/
|
*/
|
||||||
protected function registerClassAutoloadExceptions()
|
protected function registerClassAutoloadExceptions(): callable
|
||||||
{
|
{
|
||||||
spl_autoload_register(function ($class) {
|
$autoloader = function ($class) {
|
||||||
throw new \ReflectionException("Class '$class' not found.");
|
throw new \ReflectionException("Class '$class' not found.");
|
||||||
});
|
};
|
||||||
|
spl_autoload_register($autoloader);
|
||||||
|
return $autoloader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,11 +171,11 @@ class MetaCommand extends Command
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove our custom autoloader that we pushed onto the autoload stack
|
* Remove our custom autoloader that we pushed onto the autoload stack
|
||||||
|
*
|
||||||
|
* @param callable $ourAutoloader
|
||||||
*/
|
*/
|
||||||
private function unregisterClassAutoloadExceptions()
|
private function unregisterClassAutoloadExceptions(callable $ourAutoloader): void
|
||||||
{
|
{
|
||||||
$autoloadFunctions = spl_autoload_functions();
|
|
||||||
$ourAutoloader = array_pop($autoloadFunctions);
|
|
||||||
spl_autoload_unregister($ourAutoloader);
|
spl_autoload_unregister($ourAutoloader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -749,7 +749,7 @@ class ModelsCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setMethod($name, $type = '', $arguments = [], $comment = '')
|
public function setMethod($name, $type = '', $arguments = [], $comment = '')
|
||||||
{
|
{
|
||||||
$methods = array_change_key_case($this->methods, CASE_LOWER);
|
$methods = array_change_key_case($this->methods, CASE_LOWER);
|
||||||
|
|
||||||
@@ -761,6 +761,18 @@ class ModelsCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function unsetMethod($name)
|
||||||
|
{
|
||||||
|
unset($this->methods[strtolower($name)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethodType(Model $model, string $classType)
|
||||||
|
{
|
||||||
|
$modelName = $this->getClassNameInDestinationFile($model, get_class($model));
|
||||||
|
$builder = $this->getClassNameInDestinationFile($model, $classType);
|
||||||
|
return $builder . '|' . $modelName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $class
|
* @param string $class
|
||||||
* @return string
|
* @return string
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider;
|
|||||||
use Barryvdh\LaravelIdeHelper\Tests\TestCase;
|
use Barryvdh\LaravelIdeHelper\Tests\TestCase;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Mockery\MockInterface;
|
use Mockery\MockInterface;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
class MetaCommandTest extends TestCase
|
class MetaCommandTest extends TestCase
|
||||||
{
|
{
|
||||||
@@ -37,6 +38,38 @@ class MetaCommandTest extends TestCase
|
|||||||
self::assertStringContainsString('override(', $this->mockFilesystemOutput);
|
self::assertStringContainsString('override(', $this->mockFilesystemOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testUnregisterAutoloader(): void
|
||||||
|
{
|
||||||
|
$current = spl_autoload_functions();
|
||||||
|
$appended = function () {
|
||||||
|
};
|
||||||
|
|
||||||
|
$this->app->bind('registers-autoloader', function () use ($appended) {
|
||||||
|
spl_autoload_register($appended);
|
||||||
|
return new stdClass();
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->mockFilesystem();
|
||||||
|
|
||||||
|
/** @var Filesystem|MockInterface $mockFileSystem */
|
||||||
|
$mockFileSystem = $this->app->make(Filesystem::class);
|
||||||
|
$this->instance('files', $mockFileSystem);
|
||||||
|
|
||||||
|
$mockFileSystem
|
||||||
|
->shouldReceive('getRequire')
|
||||||
|
->andReturnUsing(function ($__path, $__data) {
|
||||||
|
return (static function () use ($__path, $__data) {
|
||||||
|
extract($__data, EXTR_SKIP);
|
||||||
|
|
||||||
|
return require $__path;
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->artisan('ide-helper:meta');
|
||||||
|
|
||||||
|
self::assertSame(array_merge($current, [$appended]), spl_autoload_functions());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get package providers.
|
* Get package providers.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks;
|
||||||
|
|
||||||
|
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class CustomMethod implements ModelHookInterface
|
||||||
|
{
|
||||||
|
public function run(ModelsCommand $command, Model $model): void
|
||||||
|
{
|
||||||
|
$command->setMethod('custom', $command->getMethodType($model, Builder::class), ['$custom']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks;
|
||||||
|
|
||||||
|
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class UnsetMethod implements ModelHookInterface
|
||||||
|
{
|
||||||
|
public function run(ModelsCommand $command, Model $model): void
|
||||||
|
{
|
||||||
|
$command->unsetMethod('query');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks;
|
|||||||
|
|
||||||
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
|
||||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomMethod;
|
||||||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomProperty;
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomProperty;
|
||||||
|
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\UnsetMethod;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Mockery;
|
use Mockery;
|
||||||
|
|
||||||
@@ -24,6 +26,8 @@ class Test extends AbstractModelsCommand
|
|||||||
],
|
],
|
||||||
'model_hooks' => [
|
'model_hooks' => [
|
||||||
CustomProperty::class,
|
CustomProperty::class,
|
||||||
|
CustomMethod::class,
|
||||||
|
UnsetMethod::class,
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -71,9 +75,9 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
*
|
*
|
||||||
* @property int $id
|
* @property int $id
|
||||||
* @property-read string $custom
|
* @property-read string $custom
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|Simple custom($custom)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
|
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
|
||||||
* @mixin \Eloquent
|
* @mixin \Eloquent
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user