CakePHP - проблемы с маршрутизацией по внешним ссылкам и webroot
Я настроил базовый путь для своего сайта следующим образом:
Router::scope('/', function (RouteBuilder $routes) {
//$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
//My custom base path
$routes->connect('/', ['controller' => 'Posts', 'action' => 'index', 'home']);
//Connect the rest of PagesController URLs
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
//I don't quite understand what this line does
$routes->fallbacks(DashedRoute::class);
});
Тогда URL-адреса верны, когда я перенаправляю внутри контроллеров вот так:
return $this->redirect(['controller' => 'Posts', 'action' => 'view', $data['post_id']]);
//output:
// localhost/jayblog/posts/view/2
Но для внешних ссылок и WWWROOT
, он возвращает неправильные:
<li><a href="https://www.example.com" target="_blank" title="Twitter">LINK</a></li>
//output is wrong:
// localhost/jayblog/https://www.example.com
<?= $this->Html->image(WWW_ROOT.DS.'files'.DS.$photos[$i]->file_name); ?>
//output:
// jayblogD:\path\to\file.PNG
Кто-нибудь, пожалуйста, предложите мне, как решить проблему. Спасибо!
2 ответа
Потому что WWW_ROOT - это абсолютный путь к файловой системе, а не относительный путь, который ожидает HTML::image. Это никогда не будет работать:
<?= $this->Html->image(WWW_ROOT.DS.'files'.DS.$photos[$i]->file_name); ?>
Отладьте ваши переменные и посмотрите, что происходит, например
var_dump(WWW_ROOT);
Пожалуйста, просмотрите Html::image() документацию https://book.cakephp.org/3.0/en/views/helpers/html.html и передайте ей массив, например, запросы на документацию или, скорее всего, бывает что-то вроде этого:
<?= $this->Html->image('/photos-directory/'.$photos[$i]->file_name); ?>
Где каталог с фотографиями, вероятно, существует в чем-то вроде / var / www / your-project/photos-directory
Попробуйте этот ниже замены
$routes->fallbacks(DashedRoute::class); to $routes->fallbacks('InflectedRoute');
<?php
use Cake\Core\Plugin;
use Cake\Routing\Router;
Router::defaultRouteClass('Route');
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
$routes->fallbacks('InflectedRoute');
});
Router::extensions('json', 'xml');
/**
* Load all plugin routes. See the Plugin documentation on
* how to customize the loading of plugin routes.
*/
Plugin::routes();
?>
Это работает в моем конце.
<ul>
<li><a href="http://www.cakephp.org/" target="_blank">
<?php echo $this->Html->image('technology-use/cakephp.jpg', array('alt' => 'images'));?></a></li>
</ul>