Reputation: 189
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
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
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
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
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