Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть сайт новостной, уже сделал на сайте функции "Добавить новость", "Редактировать новость", "Удалить новость".
Моя форма добавления новости на сайт
<form action="{{ route('news.store') }}" method="POST" enctype="multipart/form-data">
<div class="auth-control">
<label class="auth-control_label" for="title">Заголовок</label>
<input class="auth-control_input" placeholder="Введите заголовок" type="text" name="title" required autofocus>
</div>
<div class="auth-control">
<label class="auth-control_label" for="image">Картинка</label>
<input class="auth-control_input" type="file" name="image" id="image">
</div>
<div class="auth-control">
<label class="auth-control_label" for="description">Описание</label>
<input class="auth-control_input" placeholder="Введите описание" type="text" name="description" required autofocus>
</div>
<div class="auth-control">
<label class="auth-control_label" for="full_description">Полное описание</label>
<textarea class="auth-control_textarea" name="full_description" id="full_description" cols="30" row="10" required></textarea>
</div>
<div class="auth-control">
<label class="auth-control_label" for="author">Автор</label>
<input class="auth-control_input" placeholder="Введите автора" type="text" name="author" required autofocus>
</div>
<div class="auth-control button-control">
<button class="auth-control_button" type="submit">Добавить</button>
</div>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
Как вы видите при добавлении новой новости на сайт есть поля такие как:
"Заголовок", "Описание", "Полное описание", "Автор". Это все правильно работает.
Но есть проблема, а проблема с изображением. Надо чтобы ты мог заполнять все поля, и выбирать одну нужную картинку для новости, и чтобы она проходила через валидацию и меняла формат изображения а так же размер картинки.
Вот сам метод store моего контроллера NewsController:
public function store(PublishNewsRequest $requestData)
{
$news = new News;
$news->title = $requestData['title'];
$news->description = $requestData['description'];
$news->full_description = $requestData['full_description'];
$news->author = $requestData['author'];
$news->destination_path = $requestData['destination_path'];
if($requestData->hasFile('image'))
{
$file = $requestData->input('image');
$timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString());
$name = $timestamp . '-' . $file->getClientOriginalName();
$news->filePath = $name;
$file->move(public_path() . '/images/', $name);
}
$news->save();
return redirect()->route('news.index');
}
Моя миграция:
public function up()
{
Schema::create('news', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('description');
$table->text('full_description');
$table->string('author');
$table->string('file_path');
$table->timestamps();
});
}
Моя модель:
class News extends Model
{
protected $table = 'news';
protected $fillable = [
'title',
'description',
'full_description',
'author',
'file_path',
];
}
Мои роуты относящийся к моему контроллеру NewsController:
Route::get('/', ['as' => 'news.index', 'uses' => 'NewsController@index']);
Route::post('news', ['as' => 'news.store', 'uses' => 'NewsController@store']);
Route::get('news/create', ['as' => 'news.create', 'uses' => 'NewsController@create' ]);
Route::patch('news/{news}', ['as' => 'news.update', 'uses' => 'NewsController@update']);
Route::get('news/{news}', ['as' => 'news.show', 'uses' => 'NewsController@show']);
Route::put('news/{news}', ['as' => 'news.update', 'uses' => 'NewsController@update']);
Route::get('news/{news}/edit', ['as' => 'news.edit', 'uses' => 'NewsController@edit']);
Route::delete('news/{news}', ['as' => 'news.destroy', 'uses' => 'NewsController@destroy']);
Route::post('upload', ['as' => 'upload.image', 'uses' => 'NewsController@uploadImage']);
Прошу опытных разработчиков на laravel подправить мой код. В данный момент ругается на ошибку $name = $timestamp . '-' . $file->getClientOriginalName();
Выдает такую ошибку Call to a member function getClientOriginalName() on null.
PS Сразу говорю, загрузку файлов на сервер никогда на php не делал, возможно много ошибок в коде у меня, так как я полностью алгоритм загрузки файла на сервер не знаю. Прошу знающим людям помочь мне.
Не в сети
В контроллере поменяй вот это
$file = $requestData->input('image');
на вот это
$file = $requestData->file('image');
Не в сети
В контроллере поменяй вот это
$file = $requestData->input('image');
на вот это
$file = $requestData->file('image');
Спасибо вам за помощь, все получилось. Теперь возник вопрос, а как же обновлять мою картинку? Допустим загрузил не ту картинку по случайности, и хочу её редактировать.
Пробовал так, но картинка не меняется и не добавляется в корневую папку на сервер.
public function update($id, PublishNewsRequest $requestData)
{
$news = News::find($id);
$news->title = $requestData['title'];
$news->description = $requestData['description'];
$news->full_description = $requestData['full_description'];
$news->author = $requestData['author'];
if($requestData->hasFile('image'))
{
$file = $requestData->file('image');
$timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString());
$name = $timestamp . '-' . $file->getClientOriginalName();
$news->file_path = $name;
$file->move(public_path() . '/images/', $name);
}
$news->save();
return redirect()->route('news.index');
}
Не в сети
Ну, по идее должно работать во всяком случае у меня в подобном коде все нормально. Правда я пользуюсь Intervention Image пакетом, хз.
Сделай dd($news) и посмотри чего там вообще происходит
Не в сети
Ну, по идее должно работать во всяком случае у меня в подобном коде все нормально. Правда я пользуюсь Intervention Image пакетом, хз.
Сделай dd($news) и посмотри чего там вообще происходит
Получил следующее http://s017.radikal.ru/i431/1606/79/ea5ae9e7ff3f.png
Не в сети
Страницы 1