Задать вопрос
Vatrush
@Vatrush

Как вызвать класс через роутер?

Вот у меня имеется класс для загрузки и ресайза картинок. Да, велосипед еще тот, но я только учусь.
class Picture
{
    protected $img;
    private $type = array('image/jpeg','image/png');
    public  $size = 300000;

    public function __construct($img)
    {
        $this -> img = $img;
        $this -> checked($img);
        $this -> getSize($img);
        $this -> rename($img);

    }
    protected function checked($img){
        if(in_array($img['type'],$this->type)){
            return $this;
        } else {
            exit('Что это? '. $this->img['type']);
        }
    }
    private function getSize($img)
    {
        if($img['size'] < $this -> size){
            return $this;
        } else {
            exit("Максимальный размер файла:".$this->size);
        }

    }
    private function rename()
    {
        $name = md5(uniqid($this->img['name']));
        $extension = pathinfo($this -> img['name'],PATHINFO_EXTENSION);
        $this-> img['name'] = $name.'.'. $extension;
        return $this;
    }
    public function save()
    {
        move_uploaded_file($this->img['tmp_name'],$_SERVER['DOCUMENT_ROOT']."/image/".$this->img['name']);
        return $this;
    }
    public function resize($new_width)
    {
        list($width, $height) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/image/'.$this -> img['name']);
        $d = $height/$width;
        $new_height = $new_width*$d;
        $base = imagecreatetruecolor($new_width,$new_height);
        if($this->img['type']==='image/jpeg')
        {
            $source = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].'/image/'.$this -> img['name']);
        }
        else
        {
            $source = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].'/image/'.$this -> img['name']);
        }
        imagecopyresampled($base,$source,0,0,0,0,$new_width,$new_height,$width,$height);
        imagejpeg($base, 'image/small-'.$this->img['name']);
        return $this;
    }
}


Вызываю:
$img = new Picture($_FILES['images']);

$img-> save()
    -> resize(600);


Каким образом его нужно адаптировать под Laravel, если в в роутинге вызывается только 1 метод?
Route::get('user/profile', [
    'as' => 'profile', 'uses' => 'Controller@Method'
]);

Ведь мне нужно прогонять мой файл чтоб изменить его имя, сохранить оригинал, отресайзить и сохранить копию и в 1 метод это все пихать вообще как-то странно.
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@php_raper
Продублирую что в роуторе должен вызываться контроллером.

А также добавлю от себя:
У ларавел есть класс для работы с файлами, посчмотрите документацию
laravel.su/docs/5.4/filesystem

А также ОДИН из способОВ использовать ваш класс:
1. Вы должны использовать пространство имен namespace App, так как Загрузка классов происходит через autoloader.php - composer
2. Создайте папку library, в директории /app, должно получиться так: /app/library и залейти файл php с вашем классом
3. Для вашего класса используйте namespace App\Library
4. В контроллере который обрабатывает маршрут, подключите ваш класс:
use App\Library\Picture
5. Обращайтесь к вашему классу как Picture::staticMethod() или new Picture;

Думаю дальше вы разберетесь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы