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


Amstramgram
Auteur
Réponse acceptée

Il manquait ça =>

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

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

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;

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 ?