Используйте одну и ту же функцию для нескольких запросов get slim framework

Я пытаюсь вернуть некоторые данные JSON, используя тонкие рамки.

У меня есть данные ниже

CREATE TABLE students (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
gender INT
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB;

Пример данных

INSERT INTO students (id, name, gender) VALUES
(1, "John", 1),
(2, "Kate", 2),
(3, "Sarah",2),
(4, "Michelle", 2),
(5, "Scott", 1);

Мой PHP-код выглядит следующим образом

$app = new Slim();
$app->get('/students', 'getStudents');
$app->run();function getStudents() {

$sql = "SELECT * FROM students ORDER BY id";
try {
$db = getConnection();
$stmt = $db->query($sql);
$students = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo '{"students": ' . json_encode($students) . '}';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}

Когда я иду на следующий URL

http://localhost/api/students

Я получил это возвращено, что ожидается.

{"students":
[
{"id":"1","name":"John","gender":"1"},
{"id":"2","name":"Kate","gender":"2"},
{"id":"3","name":"Sarah","gender":"2"},
{"id":"4","name":"Michelle","gender":"2"},
{"id":"5","name":"Scott","gender":"1"}
]
}

Я хочу добавить несколько потенциальных фильтров в запрос.
например, фильтр по полу

$app = new Slim();
$app->get('/students', 'getStudents');
$app->get('/students/gender/:gender', 'getStudents');
$app->run();function getStudents($gender) {
$filterGender = '';
if($gender) {
$filterGender = "WHERE gender =" . $gender;
}
$sql = "SELECT * FROM students " . $filterGender . " ORDER BY id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
if($gender) {
$stmt->bindParam("gender", $gender, PDO::PARAM_INT);
}
$stmt->execute();
$students = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo '{"students": ' . json_encode($students) . '}';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}

Если я вернусь

http://localhost/api/students/gender/1

Я получил это возвращено, что ожидается.

{"students":
[
{"id":"1","name":"John","gender":"1"},
{"id":"5","name":"Scott","gender":"1"}
]
}

Однако если я попытаюсь

http://localhost/api/students

#1 [internal function]: getStudents()<br />
#2 \api\Slim\Route.php(392): call_user_func_array('getStudents', Array)<br />
#3 \api\Slim\Slim.php(1052): Slim_Route->dispatch()<br />
#4 \api\index.php(14): Slim->run()<br />
#5 {main}

Я думаю, в моем синтаксисе

    $app->get('/students', 'getStudents');
$app->get('/students/gender/:gender', 'getStudents');

Вторая строка заканчивается написанием первой?

Как я могу настроить это так, чтобы я мог по желанию передавать параметры в мой запрос, используя ту же функцию?

0

Решение

Вам необходимо установить значение по умолчанию для вашего параметра функции.

function getStudents($gender = "")
1

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

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

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