【CakePHP2】이미지를 저장하는 UploadPack【MQ02】

17179 단어 PHPCakePHP

개요



이번은 화상을 보존해 표시입니다.

(참고 사이트: CakePHP 이미지 리사이즈 최강 플러그인 UploadPack을 Cake 초보자라도 알 수 있도록 철저 해설 )

상의 사이트대로입니다만, 왠지 처음에 했을 때 잘 모르기 때문에, 코드 그대로 싣습니다.

환경은 CakePHP2.9.4입니다.

DB



이번에는 「images」테이블을 만들었습니다.
중요한 것은 "img01_file_name"과 같이 "_file_name"이라는 이름의 열을 준비하는 것입니다.



Plugin(플러그인)



1.GitHub에서 다운로드하여 app/Plugin에 넣기

2. upload_pack 라는 이름으로 바꾸기

3.Plugin을 로드하도록 설정
 (마지막 줄에 추가?)

app/Config/bootstrap.php
<?php

    CakePlugin::loadAll();
}

폴더 액세스 권한 설정



이미지를 저장할 폴더(upload) 아래의 모든 파일의 권한을 바꾼다.

app/webroot
mkdir upload
chmod 777 -R /upload

(추기)
「실행 권한 필요 없겠지」라고 776으로 쓰고 있었습니다만, 777이 아니면 안 되었습니다.

모델



Model/Image.php

<?php
App::uses('AppModel', 'Model');

class Image extends AppModel{

        var $name = 'Image';
        var $actsAs = array(

                'UploadPack.Upload' => array(
                        // 画像保存用フィールド名(_file_nameは書かない)
                        'img' => array(
                                'quality' => 95,
                                'path' => ':webroot/upload/:model/:style:id.:extension',

                                // styleを指定しないと、サムネイルが保存されない
                                'styles' => array(
                                        'big' => '100w', // オリジナルサイズ
                                        'small' => '80h', //
                                        'thumb' => '50x50',
                                        // 勝手にoriginalとして保存してくれてた
                                ),
                        ),
                ),

                'Search.Searchable',
        );

        public $filterArgs = array(
                'id' => array('type' => 'value'),
                'title' => array('type' => 'like'),
                'img_file_name' => array('type' => 'like'),
                'mailaddress' => array('type' => 'like'),
                'created' => array('type' => 'value'),

                /*

                [type]

                value, int              ->      等号、不等号などを使う場合
                like, string        ->      あいまい検索をする場合
                expression              ->      BETWEEN等
                subquery                ->      INを使いたい時
                query                   ->      一番自由度の高いタイプ

                 */
        );
}


컨트롤러



Controller/ImagesController.php
<?php

class ImagesController extends AppController {

        var $uses = array('Image'); // Imageモデルを使うよー

        public $components = array(
                'Paginator',
        );

        // ヘルパーの読み込みを忘れずに行う
        var $helpers = array('Form', 'UploadPack.Upload');

        public function index() {
                $this->set('images', $this->Image->find('all'));
        }

        public function add() {
                if (!empty($this->data)) {
                        if ($this->Image->save($this->data)) {
                                // /index じゃダメ、地味に微調整
                                $this->redirect('index');
                        }
                }
        }


}

?>


보기



View/Images/index.ctp

<h1>UploadPack</h1>
<p>This is UploadPack Test!</p>
<h2><?php echo $this->Html->link("Add New Image", "/images/add/"); ?></h2>

<table>
        <tr>
                <th>TITLE</th>
                <th>IMAGE</th>
                <th>FILENAME</th>
                <th>MailAddress</th>
                <th>CREATED</th>
        </tr>

<div id="contents">

        <?php foreach($images as $image): ?>
        <tr>
                <td><?php echo $image['Image']['title'];?></td>
                <td><?php echo $this->Upload->uploadImage($image['Image'], 'Image.img', array(
                        // 'style' => 'original'
                        'style' => 'thumb'
                )); ?></td>
                <td><?php echo $image['Image']['img_file_name'];?></td>
                <td><?php echo $image['Image']['mailaddress'];?></td>
                <td><?php echo $image['Image']['created'];?></td>
        </tr>
        <?php endforeach;?>

        <div class="navigation">
                <?php echo $this->Paginator->next('次のページ'); ?>
        </div>

</div>

</table>


View/Images/add.ctp

<h1>画像新規登録</h1>
<?php echo $this->Form->create('Image', array('type' => 'file')); ?>
<table>
        <tr>
                <th>TITLE</th>
                <td><?php echo $this->Form->text('Image.title'); ?></td>
        </tr>
        <tr>
                <th>Mail</th>
                <td><?php echo $this->Form->text('Image.mailaddress'); ?></td>
        </tr>
        <tr>
                <th>IMAGE</th>
        <td>
                <?php echo $this->Form->file('Image.img');?>
                <?php echo $this->Form->error('Image.img');?>
        </td>
</tr>
<tr>
<th></th>
<td>
<?php echo $this->Form->end('新規登録');?></td>
</tr>
</table>


이상

좋은 웹페이지 즐겨찾기