devastation_kvlt
@devastation_kvlt

Как в Slim Framework убрать копипасту при одинаковом коде в разных роутерах?

В некоторых роутерах есть необходимость определять переменную $args['projectFolder']=...
Хочу вместо копипасты определить функцию "для каждого роутера", где будут определяться переменные, которые используются более чем в одном роутере. Как её реализовать?

Если непонятно объяснил, то вот на примере кода
До:
$app->get('/[upload]', function ($request, $response, $args) {
    $args['projectFolder']=$this->settings['projectFolder'];
    return $this->view->render($response, 'upload.html', $args);
})->setName('main');

$app->get('/show_file/{id}', function ($request, $response, $args){
    $args['projectFolder']=$this->settings['projectFolder'];
     ......
    $args['fileUri']= $fileUri;
    return $this->view->render($response, 'show_file.html', $args);
})->setName('show_file');

После:
UnknownSuperfunction(){
    $args['projectFolder']=$this->settings['projectFolder'];
});


$app->get('/[upload]', function ($request, $response, $args) {
    return $this->view->render($response, 'upload.html', $args);
})->setName('main');

$app->get('/show_file/{id}', function ($request, $response, $args){
     ......
    $args['fileUri']= $fileUri;
    return $this->view->render($response, 'show_file.html', $args);
})->setName('show_file');
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@brzsmg
Вариант 1
init_vars(){
    $vars['x']='hello';
    return $vars;
});

$app->get('/[upload]', function ($request, $response, $args) {
    $vars= init_vars();
    return $this->view->render($response, 'upload.html', $args);
})->setName('main');

$app->get('/show_file/{id}', function ($request, $response, $args){
    $vars= init_vars();
    $args['fileUri']= $fileUri;
    return $this->view->render($response, 'show_file.html', $args);
})->setName('show_file');


Вариант 2
$vars['x']='hello';

$app->get('/[upload]', function ($request, $response, $args) use ($vars) {
    $x = $vars['x'];
    return $this->view->render($response, 'upload.html', $args);
})->setName('main');

$app->get('/show_file/{id}', function ($request, $response, $args) use ($vars){
    $x = $vars['x'];
    $args['fileUri']= $fileUri;
    return $this->view->render($response, 'show_file.html', $args);
})->setName('show_file');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы