我正在尝试编写一个简单的博客,以获取有关php的经验。 该博客不仅具有帖子,还具有帖子可以属于的类别。 (标题为“ lorem ipsum”的帖子的类别1令人恐惧,例如) 还有两个表,但是这是不必要的。
table: posts table: categories
id = 1* category = Fantasy
c_Id = 2** id = 2*
title = hello world
subheading = greeting the world
content = hello.
当我在博客上单击“幻想”类别时,它应该让我获得所有帖子 与我单击的类别。 我有一个带有CategoryRepository的自制框架,可以在其中与 数据库和具有在我的博客上呈现网站的功能的PostsController。
当我单击一个类别时,它将带我到该网址(“恐怖”代表不同的类别):
http://localhost:8888/blog/public/index.php/categories/Horror
我在PostsController中具有此功能,在该功能中,我试图从url中获取类别名称(即使我需要动态的类别名称,我也无法通过会话/ POST来获取它。严格要求类别名称,而不是网址中的类别ID。)
public function categoryOverview() {
$url = 'http://localhost:8888/blog/public/index.php/categories/Horror';
$endOfUrl = basename($url);
if($endOfUrl == "Horror") {
$categoryName = "Horror";
}
$categories = $this->categoryRepository->allCategories();
$idFromCategory = $this->categoryRepository->idFromCategory($categoryName);
$this->render("cats/categoryOverview", [
'id' => $idFromCategory,
'categories' => $categories,
]);
}
更新: 我设法动态获得了网址的结尾(可能是一个丑陋的代码,但至少可以正常工作):
public function categoryOverview() {
$url = $_SERVER['REQUEST_URI'];
$categoryName = basename($url);
$categories = $this->categoryRepository->allCategories();
$idFromCategory = $this->categoryRepository-
>getPostFromCategory($categoryName);
$this->render("cats/categoryOverview", [
'id' => $idFromCategory,
'categories' => $categories,
]);
}
UDAPTE END
这是CategoryRepository中的idFromCategory(),它应该从URL中的类别(也就是我单击的on)中获取ID和类别:
public function idFromCategory($categoryName) {
$table = $this->getTableName();
$model = $this->getModelName();
$stmt = $this->pdo->prepare(
"SELECT * FROM `$table` WHERE category = :category");
$stmt->execute(['category' => $categoryName]);
$stmt->setFetchMode(PDO::FETCH_CLASS, $model);
$idFromCategory = $stmt->fetch(PDO::FETCH_CLASS);
var_dump($idFromCategory);
return $idFromCategory;
}
我可以在会话中完成吗?要单击的类别位于导航栏的标题中,我浏览了表中的类别,并使用foreach将其放入菜单中,这非常好。但是当我输入$ _SESSION ['categoryID'] = $ category-> category;我会得到最后一个类别的ID。
肯定有比我尝试做的更简单的方法,但是怎么做?
我现在真的不是为什么,但是,尽管听起来很简单,但我似乎无法在单击类别时列出该类别的所有帖子。
我希望任何人都能理解我在这里写的内容:D 我真的只是用php编程的开始,所以我真的希望有人可以帮助我。即使只是说我的代码太可怕了。
预先感谢:)
答案 0 :(得分:0)
您可以使用联接获取与某个类别相关的所有帖子
SELECT posts.*, categories.* FROM posts
INNER JOIN categories ON posts.c_id = categories.id
WHERE categories.category = :category