=s this->Html -> link (s article-> title,[ 'action
=>'view', article -> slug ])
td>
|
?= s article-> created -> format (DATE RFC850)?>
/td>
/ try
< php endforeach;?>
< TABLE>
在上一节中,我们使用了“ articles"变量给视图set()。传递到视图中的变量在视
图模板中可用作我们在上面的代码中使用的局部变量。
您可能已经注意到使用了个名为的对象$this->Htm1。这是
的一个实例。
附带了一组视图助手,可以轻松
创建链接,表单和分页按钮等任务。您可以在其章节中了解冇关助手的史多信息
但重要的是要注意的是该1ink()方法将生成带有给定链接文本(第一个参数)
(第二个参数)的
链接。
和在用
中指定时,建议您使用数组或命名路由。这些语法允许您利
提供的反向路由功能。
此时,您应该能够将浏览器指向:
您应该看到列表视图,使用文章的标题和表格列表正确格式化
创建查看操作
如果您单击我们的文章列表页面中的某个“查看”链接,您会看到一个错误页面,
指出该操作尚未实施。让我们现在解决这个问题:
//添加到现有的src/ Controller/ Articlescontro1er.php文件
公共函数视图($s1ug
nulL)
s article
s this - Articles - findBySlug (s slug
firstorfail()
s this -> set (compact ('article))
虽然这是一个简单的操作,但我们使用了一些强大的
功能。我们通过
使用开始我们的行动关闭 findBys1ug()这是一个动态查找。此方法允许我们创
建一个基本查询,通过给定的查找文章。然后我们 firstorfai1()用来获
取第一条记录,或者抛出一条记录 Not FoundException。
我们的操作需要一个$s1ug参数,但该参数来自哪里?如果用户请求
/ articles/view/ first-post,那么值
将通过$51ug
的路
由和调度层传递。如果我们在保存新操作的情况下重新加载浏览器,我们会看到
另一个
错误页面告诉我们我们错过了一个视图模板让我们解决这个
问题。
创建视图模板
让我们为新的“视图”操作创建视图,并将其放在
中
<
File: src/ Template Articles view ctp
=h (s article -> title
=h (s article->body
kp>Ezt:=$ article -> created -> format (DATE
RFC859)?>
= s this ->Htm1 -> link ('Edit,['action$a
rticle -> slug
?>
您可以/ articles/ index通过访问链接来验证这是否有效,或通过访问
手动请求文章/ artic1es/view/ first-post
添加文章
创建基本读取视图后,我们需要创建新文章。首先在中创建一个add()动
作 Articles controller。我们的控制器现在看起来像
// src/ Controller/ Articles Controller. php
命名空间App\ Contro1er
使HApp、 Contro11er、 Appcontro11er;
关 Articlescontro1ler扩展 AppContro1ler
public function initialize (
parent : initialize ()j
s this - loadComponent ('Paginator'
s this-> load Component ('Flash') //E FlashComp
onent
public function index (
s articles
s this
Paginator -> paginate ( th
is - Articles - find ()
s this -> set (compact ('articles))
public function view (s slug
s article this - Articles - findByslug (s sl
firstor Fail (
s this -> set (compact ('article))
public
c function add (
s article= s this -> Articles - newEntity (
if (s this -> request
is
post))
s article this-> Articles-> patchEntity
(s article, s this -> request -> getData ()
/对 user id进行硬编码是临时的,稍后将
在我们构建身份验证时删除。
s article ->user id= 1
if (s this -> Articles -> save (s article )
s this
lash -> success
('你的文章已
保存。'));
return $s this -> redirect (['action
index1)
s this
Flash->错误((无法添加你的文章。
s this -> set ('article,
您需要将
组件包含在您将使用它的任何控制器中。通常将它包含在您的中
是有意义的 AppContro1ler
这是ad()动作的作用:
如果请求的
方法是
,请尝试使用
模型保存数据。
如果由于某种原因它不保存,只需渲染视图。这使我们有机会显示用户验证
错误或其他警告
每个
请求都包含一个可以使用的请求对象$this-> request。请求对
象包含有关刚收到的请求的信息。我们使用
该Cake\http\ServerRequest::is()方法检查请求是为
请求
我们的
数据可用于$his-> request-> getData()。如果要查看它的外观
可以使用pr()或 debug()函数将其打印岀来。为了保存我们的数据,我们首先
将
数据“封送”到文章实体中。然后使用我们之前创建的
持久
化实体
保存新文章后,我们使用
的 success()方法将消息设置到会
话中。该 success方法使用的魔术方法功能提供。重定向后
消息
将显示在下页上。在我们的布局中,我们显示了消息并清除了相应的会
话变量。最后,保存完成后,我们会将用户发送回文章列表。
转换为
,即。的索引动作。您可以参考上的函数来查看可以为各种
函数指定的格式。=$this->F1ash-
>render()?>Cake\ Controller\ Controller: redirect['action=>in
dex'/articlesArticlesControllerCake\routing\ Router: url()
创建添加模板
这是我们的添加视图模板:
<
File: src Template Articles add ctp
添加文章
< php
echo this -> Form -> create (s article
//现在硬编码用户
echo this - Form
control ('user id
[type
=>hidden
va⊥ue
>1])
echo this - Form->control ('title
echo s this - Form-> control(rows
echo s this - Form -> button(('Save Article))
echo s this -> Form ->end (
我们使用
为
表单生成开始标记。这是$this->Form
> create()生成的
< form method=“ post action=/ articles/add”>
因为我们在 create()没有选项的情況下调用,所以 FormHelper假设我们
希望表单提交回当前操作。
该$this->Form-> contro1()方法用于创建同名的表单元素。第一个参数告诉
它们对应哪个字段,第二个参数允许您指定多种选项在这种情况下
是
的行数。这里使用了一些内省和惯例。在 contro1()将输出不同形
式的元件基于指定的模型字段,并使用拐点来生成标签文本。您可以使用选项自
定义表单控件的标签,输入或任何其他方面。该$his->Form->end()调用关闭
窗体
现在让我们回过头米更新我们的
视图以
包含一个新的“添加文章”链接。在此之前,添加以下行
s this -> Htm1->link ('Add Article
action
添加简单的生成
如果我们现在要保存一篇文章,那么保存就会失败,因为我们没有创建一个
属性,而且列是。
的
但荣次获彻的,《们可以使用
//1. src/ Model Table ArticlesTable php
命名空间App\Mode1\Tab1e
使用cake\ORM\ Table;
//Text类
使用Cake\ti1ity\Text
//添加以下方法。
public function before Save (s event entity, s options
if (s entity ->isNew ()&& $s entity -> slug) i
s sluggedTitle= Text : slug ( entity ->title);
/修剪蛞蝓在模式中定义的最大长度
$实体->塞= SUBSTR($s1 uggedTit1e
191)
这段代码很简单,并没有考虑重复的但我们稍后会解决这个问题。
添加编辑操作
我们的应用程序现在可以保存文章,但我们无法编辑它们。让我们现在纠正。将
以下操作添加到您的 Articlescontro11er:
//4 src/ Controller Articlescontroller php f
//添加以下方法。
公共西教编辑($SLug)
s article s this - Articles -> findBySlug (s slug
firstOrFail O
if (s this-> request-> is (I ' post
put
(系统自动生成,下载前可以参看下载内容) 下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
|