Пользовательская маршрутизация FatFree не работает должным образом

Поскольку я пытаюсь написать модульные тесты в среде Fatfree с помощью phpunit, у меня возникла проблема с внедрением зависимостей. Я пытаюсь передать объект sql в конструктор вызывающего класса, чтобы заставить его работать, я настроил логику маршрутизации следующим образом:

routes.php

<?php

return array(
"/index/something" => array(
'class' => 'IndexController',
'action' => 'index',
'method' => 'GET',
'requireDependency'=> 0,
'mapper' => ''
),
"/@action/@name" => array (
'class' => "RandomController",
'action' => 'index',
'method' => 'GET',
'requireDependency'=> 1,
'mapper' => 'environment')
);

index.php

<?php

require('vendor/autoload.php');

// Retrieve instance of the framework
$f3=require('lib/base.php');

// Initialize
$f3->config('config/config.ini');

$configs = require 'config/routes.php';/**
* Dependency Injection for SQLMapper
*/

foreach ($configs as $url => $customParams) {

$f3->mset(
array(
'class' =>  $customParams['class'],
'action'=> $customParams['action'],
'mapper'=> $customParams['mapper'],
'requireDependency' => $customParams['requireDependency']
)
);$methodandUrl = $customParams['method']." ".$url;

$f3->route(
$methodandUrl,
function ($f3, $params) {
$sqlMapper = "";

$class = $f3->get('class');
$hasDependency = $f3->get('requireDependency');

if($hasDependency) {
$dependency = new DependencyController();
$sqlMapper = $dependency->returnSQLMapper($f3);
}

if(!empty($sqlMapper))
$object = new $class($f3, $sqlMapper);
else
$object = new $class($f3);

if(empty ($params['action']))
$action = $f3->get('action');
else
$action = $params['action'];

call_user_func(array($object, $action), $f3);
});
}

// Execute application
$f3->run();

IndexController.php

<?php
class IndexController {

protected $db = "";

public function index($f3) {
$view=new View;
echo $view->render('index.htm');
}
}

RandomController.php

class RandomController {

protected $className, $dp;

public function __construct($f3,$dependency) {
$this->className = $f3->get("PARAMS.name");
$this->dp = $dependency;
}

public function index($f3) {
$view=new View;
$f3->set('name', $this->className);
echo $view->render('template.htm');
}

}

Поэтому, когда я запускаю «index / что-то», он должен вызывать мою функцию индекса, однако он вызывает функцию индекса RandomController. Я не уверен, где я иду не так, кто-нибудь может мне помочь?

Обновить

Или есть какой-нибудь другой способ, которым я могу сделать внедрение зависимости?

0

Решение

Я выяснил проблему,

$f3->mset(
array(
'class' =>  $customParams['class'],
'action'=> $customParams['action'],
'mapper'=> $customParams['mapper'],
'requireDependency' => $customParams['requireDependency']
)
);

поскольку я устанавливал это в цикле, он всегда вызывал последний маршрут, так как раньше переписывал предыдущий. Так что я переместил это из цикла, как показано ниже

$f3->set('url', $configs);

Это будет содержать весь route.php, а также изменен

$urls = $f3->get('url');
foreach($urls as $url => $config){
if($f3->build($url) == $params[0]){
$f3->mset(array(
'class' => $config['class'],
'action' => $config['action'],
'requireDependency' => $config['requireDependency'],
'mapper' => $config['mapper']
));
break;
}
}

Так что не класс точно отображается на введенный URL.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]