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.