Missing argument 2 RecursiveFilterIterator

Par Amstramgram, il y a 10 ans


Bonsoir, j'ai beau chercher mais je ne trouve et surtout comprends pas pourquoi j'ai cette erreur. Bon, j'ai bien compris qu'il manque un argument.

L'erreur :

Details Type: ErrorException Code: 2 Message: Missing argument 2 for Helpers\RecursiveFilenameFilter::__construct() File: /mypath/app/helpers/RecursiveFilenameFilter.php Line: 8 Trace 0 Applications/MAMP/htdocs/PHP/lumos/app/helpers/RecursiveFilenameFilter.php(8): Slim\Slim::handleErrors(2, 'Missing argumen...', '/Applications/M...', 8, Array) 1 [internal function]: Helpers\RecursiveFilenameFilter->__construct(Object(RecursiveDirectoryIterator)) 2 /mypath/app/helpers/PagesController.php(14): RecursiveFilterIterator->getChildren() 3 /mypath/config/router.php(17): Helpers\PagesController->__construct(Object(Slim\Slim)) 4 [internal function]: Router->{closure}('californie') 5 /mypath/vendor/slim/slim/Slim/Route.php(468): call_user_func_array(Object(Closure), Array) 6 /mypath/vendor/slim/slim/Slim/Slim.php(1357): Slim\Route->dispatch() 7 /mypath/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim->call() 8 /mypath/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call() 9 /mypath/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call() 10 /mypath/vendor/slim/slim/Slim/Slim.php(1302): Slim\Middleware\PrettyExceptions->call() 11 /mypath/public/index.php(18): Slim\Slim->run() 12 {main}

J'ai ça :

$regex = '/^([.][^.\/\\])|([\/\\]+[.][^.])/'; $iterator = new \RecursiveDirectoryIterator(CONTENT_PATH); $iterator->setFlags(\RecursiveDirectoryIterator::SKIP_DOTS); $files = new \RecursiveIteratorIterator(new RecursiveFilenameFilter($iterator, $regex), \RecursiveIteratorIterator::SELF_FIRST);

Ma Class :

namespace Helpers; class RecursiveFilenameFilter extends \RecursiveFilterIterator { private $regex; public function __construct(\Iterator $iterator, $regex ) { parent::__construct($iterator); $this->regex = $regex; } public function accept() { if(preg_match_all($this->regex, $this->getInnerIterator()->current()->getFilename() ) ){ return false; } return true; } }

Merci,
des bisous.

4 réponses

Grafikart, il y a 10 ans

RecursiveFilenameFilter attends 2 paramètre lors de sa construction, et tu ne lui en envoit qu' un seul

Amstramgram, il y a 10 ans

Oui mais ici j'ai bien deux argument ? RecursiveFilenameFilter($iterator, $regex) et dans le construct aussi. Du coup il lui arrive quoi ?

public function __construct(\Iterator $iterator, $regex ) { parent::__construct($iterator);around $this->regex = $regex;around }

Et je viens de tester dans la Class RecursiveFilenameFilter dans la function accept() j'ai bien mes deux chaines de caractères. Promis! :)

Et je peux même te dire qu'elle return true;

Amstramgram, il y a 10 ans

Ok j'ai peut être trouvé le pourquoi de la chose. Enfaite il manque un argument mais seulement à partir de la deuxieme iteration. Et je pense que c'est $regex qui n'est pas passé dans la fonction à la deuxieme iteration.
Comment je peux en être sur ?

Amstramgram, il y a 10 ans

Il manquait ça =>

public function getChildren() { return new self($this->getInnerIterator()->getChildren(), $this->regex); }