Brian Millot
Brian Millot

Reputation: 189

How to check if the element exist in Cakephp 3?

What is the best way to check if the an element, a .ctp file exist in cakephp 3 ?

Something like this,

<?php
// if the elemet exist display it
$this->render('/Element/Trip/'.$current_step);
// else display another element instead
?>

Thanks :)

Upvotes: 0

Views: 1708

Answers (4)

fiblan
fiblan

Reputation: 436

Use $this->elementExists:

<?php
 if ($this->elementExists('Trip/'.$current_step)) {
   echo $this->element('Trip/'.$current_step);
 } else {
   echo $this->element('Trip/default.ctp');  
 } 

http://api.cakephp.org/3.2/class-Cake.View.View.html#_elementExists

if you don't want display another element but don't throw exception, you can use ignoreMissing option

$this->element('Trip/'.$current_step,$data, ['ignoreMissing' => true])

Upvotes: 6

floriank
floriank

Reputation: 25698

file_exists() and use the Controller::$viewPath property.

But this is IMHO bad practice because you should know your elements and not rely on guessing. $current_step implies there are some steps, guess they're finite. So instead of doing the check in the view check if the step is in your range of steps from 1 to 5 in the controller for example and if it's not throw a NotFoundException. The exception will return a 404, so you can check your response for that status code when handling the response in your client via JS.

public function my_action($step) {
    if (!in_array($step, ['step1', 'step2', 'step3', 'done']) {
        throw new \NotFoundException();
    }
}

Upvotes: 3

Jitendra Kumar. Balla
Jitendra Kumar. Balla

Reputation: 1213

You have to check file is existed or not?. If file is existed then do some thing or else do some thing

<?php
// if element exists
$element='/Element/Trip/'.$current_step;
if(file_exists($element))
   $this->render($element);
else
{
   // Display another element.
}
?>

Upvotes: 0

Manish Gaikwad
Manish Gaikwad

Reputation: 348

<?php
// if the elemet exist display it
if(file_exists ('/Element/Trip/'.$current_step))
$this->render('/Element/Trip/'.$current_step);
else
// else display another element instead
?>

Upvotes: 1

Related Questions