0

我正在尝试进入无脂肪的 php 框架,它的工作原理就像一个魅力。有一个视图我无法弄清楚。长话短说,在这里找到一个简单的例子:

http://barbatti.de/f3/

问题:

  1. 当点击记录时,触发 GET /view/@id 路由。如何在下一篇文章和上一篇文章的以下单一视图中实现导航。如果没有下一篇文章和编号,则链接不应可见。当前文章的名称应为namend。(我已经阅读了关于游标的方法,但无法弄清楚)

  2. 如何在单个视图中使用所有找到的文章填充选择框?

  3. 我如何必须从问题 2 的选择框下拉列表中更改它还收听帖子的单个视图的路由?

我的设置:

index.php(我在下面的代码中踢了 GET / 路由)

$f3 = require('lib/base.php');

$f3->set('DB',
  new DB\SQL(
    'mysql:host=localhost;port=3306;dbname=f3',
    'root',
    'root'
  )
);

$f3->route('GET /view/@id',
  function($f3) {
    $id = $f3->get('PARAMS.id');
    $article=new DB\SQL\Mapper($f3->get('DB'),'test');    
    $f3->set('list',$article->find(array('id=?',$id)));
    echo template::instance()->render('single.htm');
  }
);

$f3->run();

模板单视图:

<repeat group="{{ @list }}" value="{{ @item }}">
    <p>
      {{ @item.name }}
      {{ @item.text }}
      {{ @item.age }}
    </p>
</repeat>

<hr>
<a href="view/@item">prev</a> | <a href="view/@item">next</a> | <small>this is entry XX from XX</small>
<p> <small>Select Entry:</small></p>
<form action="/view" method="post">
   <select name="goto">
      <repeat group="{{ @list }}" value="{{ @item }}">
        <option value="{{ @item.id }}">{{ @item.name }}</option>
      </repeat>
   </select>
<input type="submit">
</form>

SQL:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `text` text NOT NULL,
  `age` text NOT NULL,
  `rel` int(11) NOT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

INSERT INTO `test` (`id`, `name`, `text`, `age`, `rel`) VALUES
   (1, 'a', 'hi', '20', 1),
   (3, 'b', 'yes', '25', 1),
   (4, 'c', 'why not', '30', 1),
   (5, '1', 'why', '15', 2),
   (6, '2', 'Ahoi', '35', 2),
   (7, '3', 'ade', '40', 2);

非常感谢!

4

2 回答 2

1

to 1:这种方式很脏,但是您可以进行两个额外的查询,以查找具有更高或更低 id 的文章。如果它返回另一个结果,您可以添加上一个或下一个链接。您应该通过在 Stackoverflow 上查找“分页”来找到更多示例。

到 2:您必须对数据库中的所有条目进行另一个查询以填充该框。

到 3:要么为该表单操作创建一个新路由,要么将您的路由更改为:GET|POST /view/@id但这意味着,您还必须将表单中的操作更改为确切的路由。所以,动作必须看起来像:(action="{{(int) @PARAM.id}}"我添加了(int)防止跨站点脚本)

于 2014-02-07T14:32:03.880 回答
1

为什么在 where 条件中使用带有 id 条件的 find(),它可能只返回 1 个结果,然后遍历整个列表?这对我来说没有多大意义。使用 findone() 或 load() 方法...然后使用 $article->next()->dry(); 确定是否有另一条记录... prev() / skip(-2) 相同

于 2014-02-08T01:04:04.707 回答