Posted under » CakePHP on 11 Dec 2018
Continued from the create summary view article.
Add the view function to existing src/Controller/ArticlesController.php file
<¿php
// src/Controller/ArticlesController.php
namespace App\Controller;
class ArticlesController extends AppController
{
public function index()
{
$this->loadComponent('Paginator');
$articles = $this->Paginator->paginate($this->Articles->find());
$this->set(compact('articles'));
}
public function view($slug = null)
{
$article = $this->Articles->findBySlug($slug)->firstOrFail();
$this->set(compact('article'));
}
The findBySlug() allows us to create a basic query that finds articles by a given slug.
We then use firstOrFail() to either fetch the first record, or throw a NotFoundException.
Our action takes a $slug parameter, but where does that parameter come from? If a user requests '/articles/view/first-post', then the value ‘first-post’ is passed as $slug by CakePHP’s routing and dispatching layers.
If we reload our browser with our new action saved, we’d see another CakePHP error page telling us we’re missing a view template; let’s fix by creating the view for our new ‘view’ action and place it in 'src/Template/Articles/view.ctp'
<!-- File: src/Template/Articles/view.ctp -->
<h1><?= h($article->title) ?>
<p><?= h($article->body) ?>
<p><small>Created: <?= $article->created->format(DATE_RFC850) ?>
<p><?= $this->Html->link('Edit', ['action' => 'edit', $article->slug]) ?>
You can verify that this is working by trying the links at /articles/index or manually requesting an article by accessing URLs like /articles/view/first-post.
Next we learn how to add a new record and edit a record.