CakePHP - Галерея изображений Приложение завершено, теперь как писать маршруты для /: имя_альбома? - PullRequest
0 голосов
/ 03 августа 2011

Как я могу использовать / album_name и / album_name / image_name для путей в моей галерее? У меня уже есть работающий сайт, но в настоящий момент пути / album, / image с функциями index () и view ().

<?php
class Image extends AppModel {
        var $name = 'Image';
        var $displayField = 'Name';
        var $belongsTo = array(
                'Album' => array(
                        'className' => 'Album'
                )
        );
}
<?php
class Album extends AppModel {
        var $name = 'Album';
        var $displayField = 'name';

        var $belongsTo = array(
                'ParentAlbum' => array(
                        'className' => 'Album',
                        'foreignKey' => 'parent_id'
                )
        );

        var $hasMany = array(
                'ChildAlbum' => array(
                        'className' => 'Album',
                        'foreignKey' => 'parent_id',
                        'dependent' => false
                ),
                'Image' => array(
                        'className' => 'Image',
                        'foreignKey' => 'album_id',
                        'dependent' => false
                )
        );
}

<?php
class ImagesController extends AppController {

        var $name = 'Images';

        function index() {
                $this->Image->recursive = 0;
                $this->set('images', $this->paginate());
        }

        function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid image', true));
                        $this->redirect(array('action' => 'index'));
                }
                $this->set('image', $this->Image->read(null, $id));
        }

}
[root@directadmin01 public_html]# cat controllers/albums_controller.php
<?php
class AlbumsController extends AppController {

        var $scaffold = 'admin';

        var $name = 'Albums';

        var $paginate = array(
        'limit' => 95,
        'order' => array(
        'Album.name' => 'asc')
        );

        function index() {
                $this->Album->recursive = 0;
                $this->set('albums', $this->paginate());
                $this->set("title_for_layout","Albums");
        }

        function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid album', true));
                        $this->redirect(array('action' => 'index'));
                }
            }
            $this->set('album', $this->Album->read(null, $id));
            $this->set("title_for_layout", $this->Album->data['Album']['name']);
        }
}

Это мое первое приложение Cakephp, поэтому, пожалуйста, не обращайте на меня внимания. Я впечатлен тем фактом, что целый (простой) сайт галереи может быть написан в несколько строк.

Однако, кажется, что создание маршрутизации в стиле / album_name / image_name может быть сложным?

Это должно быть похоже на

    Router::connect('/:album_name', array('controller' => 'albums', 'action' => 'view', 'home'));
    Router::connect('/:album_name/:image_name', array('controller' => 'images', 'action' => 'view', 'home'));

Но как это может быть реализовано? Имена альбомов в базе данных состоят из нескольких регистров и пробелов, в то время как я хотел бы использовать тире и строчные URL.

1 Ответ

0 голосов
/ 03 августа 2011

это немного сложнее, чем просто маршрутизация, вам захочется прочитать о slug и cakephp.Посмотрите здесь: CakePHP - Как сделать обратную маршрутизацию с помощью slug?

...