Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Мета csrf и ajax setup давно сделаны ибо все работало ж как то.
Ребят вообщем. Проблема решилась. Что то случилось с кодом самого фреймворка. Каким то образом повредились файлы. Хз как такое возможно. Но все вылечилось установкой заново самого фремфорка.
И все заработало... не трогая не строчки кода... мистика.
Спасибо огромное ;-)
Странная штука приключилась.
Всё работало долгое время.
Начались проблемы как то странно. Нужно было добавить пару значений возвращаемых после ajax запроса.
было
$response = array(
'status' => true,
'success' => true,
'posts' => $posts_pre
);
return Response::json($response);
стало
$response = array(
'status' => true,
'success' => true,
'posts' => $posts_pre,
'slide_time' => Setting::inCache()['slide_time'],
);
return Response::json($response);
После изменения 1ой единственной строки в коде отвалились абсолютно все запросы ajax, даже не связанные с тем что я менял. Причем отвалились очень хитро.
.done(function (data)
{
if (data.success == true) {
console.log(data)
}
тупо не срабатывало условие (data.success == true)
хотя если просто сделать чуть ниже тот же самый console.log(data)
в data все данные присутствовали. Сначала я решил что проблема чисто JS.
Но спустя пару часов отвалились абсолютно все запросы(хотя код не трогался вообще) которые хоть как то связанны как я понимаю с куками или сессией. Даже logout с сайта не работает и вылезает TokenMismatchException.
Кто подскажет куда копать? Спасибо
Мда... Боюсь придется так оставить.
Сейчас сами категории закешированы. А вот посты не закешировать никак(хотя сам пост как единица закеширована). Нужна актуальность постов с точностью до минуты.
Вообщем проблема. Необходимо загрузить все категории с постами, но количество постов в каждой категории ограничить например 3мя.
Финт ушами ниже не пройдет так как лимит сразу ко сем постам применяется
Category::with(['posts' => function ($query) {
$query->orderBy('created_at', 'desc')
->limit(3);
}])
->get();
Кто сталкивался с такой проблемой?
PS сейчас сделано немного иначе, но вместо 1 запроса получается куча
foreach($categories as $category){
$posts = $category->postsPublic()->limit(3)->get();
foreach( $posts as $post){
///////////////////////////////////////
}
}
Вообщем нашел таки я решение... Если кому то еще понадобиться вручную работать с Request откопал у себя же решение в одном из проектов
$tagRequest = new Requests\TagRequest([
'title' => $tag_title,
'slug' => $tag_slug
]);
$tagValidator = Validator::make($tagRequest->sanitize(), $tagRequest->rules());
if (!$tagVa->fails())
$tag = (new TagController())->store($tagRequest);
вопрос пока открыт как вручную сделать Request что бы его потом передать в контроллер
к сожалению мне не достаточно еще и создать запись. в методе стор еще кучу всего приходится делать(возможно я и не прав что это делаю именно в контроллере)
public function store(PostsRequest $request)
{
$created_item = Post::create($request->all());
$created_item->tags()->sync($this->gettaglist($request['tagstring']));
if (isset($request['pictures']) && $request['pictures'])
foreach ($request['pictures'] as $id)
$created_item->attach($created_item->user_id,'Picture',$id);
if (isset($request['youtube']) && $request['youtube'])
foreach ($request['youtube'] as $id)
$created_item->attach($created_item->user_id,'Youtube',$id);
$posts_settings = NULL;
if ($created_item and $created_item->state == 1 and isset($request['postssettings'])) {
$posts_settings = PostsSetting::create(array_merge(['post_id' => $created_item->id ],$request['postssettings']));
}
if ($posts_settings)
event(new PostWasCreated($created_item,$posts_settings));
$this->clearcache($created_item);
return Redirect::back();
}
я вас понял спасибо.
Но тут есть одно но...
вы правильно сказали что структура левая. Она абсолютно левая.
на основе данных что приходят я могу сгенерировать массив.
Но мне его нужно валидировать. Так как самому богу известно что туда может попасть.
И вот как мне сделать валидацию?
$data = [
['name' => 'Vasya', 'city' => 'Moscow'],
['name' => 'John', 'city' => 'London']
];
К тому же у меня Request еще и занят предварительной подготовкой данных.
Небольшой пример из PostsRequest
public function sanitize()
{
$input = $this->all();
if (!isset($input['slug']) or empty($input['slug'])) {
$input['slug'] = str_random(15) . '-' . Carbon::now()->toDateTimeString();
}
$input['slug'] = strtolower(preg_replace("/[\s_:]/", '-',preg_replace("/[\s-]+/", " ",$input['slug']) ));
if ((!Auth::user()->able('posts_create')) or (!Auth::user()->able('posts_edit'))){
$input['state'] = 1;
$input['user_id'] = Auth::user()->id;
$input['access'] = 1;
$input['published_at'] = Carbon::now();
}
$this->replace($input);
return $this->all();
}
Что бы было понятно напишу немного подробнее что я хочу что бы было
public function storeMultiplePosts(MultiplePostsRequest $request)
{
$request_data = $request->all();
$data = $request_data['exposts'];
foreach ($data as $item){
$post_ = [];
/* куча кода что бы подготовить массив на основе того что есть в $item, так как дать гарантию не могу того что попадает в item ввиду того что эти данные приходят со стороннего ресурса */
/* плюс к этому на основании настроек что так же придут мне надо внести изменения отдельно в каждый пост. например в данном item не использовать текст или метки или дату публикации выставить другую
/* тот массив что я подготовил теперь нужно валидировать */
//например как то так
$valid_post_data = new PostsRequest($post_ )
// и после того как уже мы проверили то что мы сгенерировали мы отправляем в контроллер
(new PostController)->store($valid_post_data);
}
}
Выноси создание одного поста в модель, буквально сегодня на похожий вопрос ответил. А еще лучше, выноси в модель и используй batch (bulk) insert, чтобы вставить данные одним запросом, а не создавать N отдельных запросов.
одним запросом не выйдет. Так как данные что придут извне имеют еще кучу всего, настройки, отдельные модификации поста
мне надо вручную подготовить данные для валидации и сделать PostsRequest.
$request_data = $request->all();
$data = $request_data['exposts'];
опять же повторю.
ниже кусок кода лишь пример.
public function store(PostsRequest $request)
{
Post::create($request->all());
return Redirect::back();
}
чтобы вставить данные одним запросом, а не создавать N отдельных запросов.
можно пример?
Добрый день дорогие форумчане. С новым всех годом!
Помогите пожалуйста решить задачку.
Смотрите.
У меня есть PostController с методом store
например
public function store(PostsRequest $request)
{
Post::create($request->all());
return Redirect::back();
}
перед тем как создать что то данные валидируются в PostsRequest
И все конечно работает. Но тут мне понадобилось усложнить приложение.
Смотрите в чем проблема
Есть контроллер в который попадает массив с данными на базе которых мне нужно сгенерировать более 1 записи Post
то есть что я хочу сделать
public function storeMultiplePosts(MultiplePostsRequest $request)
{
$request_data = $request->all();
$data = $request_data['exposts'];
foreach ($data as $item){
(new PostController)->store($PostsRequest);
}
}
иными словами мне вручную надо как то подготовить и сделать PostsRequest и передать его в PostController->store
Спасибо за помощь!
Вполне себе нормальная конструкция (предпочитаю auth()->check()). В Middleware разумно делать логику, когда нужно отсечь часть пользователей от каких-либо маршрутов. Если нужно проверить авторизован пользователь или нет "здесь и сейчас", то как еще это делать?
я полностью согласен с вами, если здесь и сейчас то да auth()->check() незаменим.
но в топик контроллере у автора в каждом методе auth()->check(), и как то сильно нагромаждено, вот я и предложил уже реализованный middleware auth.
Вы вообще адекватный? Я с вами нормально разговаривал. И высказывал свое мнение. Так же вам я указал на явные ошибки.
Вы говорите я вас идиотом выставил?
Вы публично выставляете меня идиотом на стадии разработки с черновым кодом, не это ли троллинг?
Извините, но идиотом выставили вы сами себя и отбили желание многих вокруг вас вам что то вообще говорить и советовать!
Хренею от палемики ни о чём.
Это счас была попытка строллить меня с уклоном в обидку?
Прочёл много букв
на хамство перешли вы
Пришёл, нагадил, хлопнул дверью и был таков!
Удачи, не спотКнись!)
Вполне логичная схема.
Я бы поспорил. Но это бестолку - вы всё решили.
Удачи в разработке - она вам пригодится!
PS
Однако в недалёком будущем я планирую сделать пользователя "гость", и перенести все валидации на механику ->can(), но пока будет именно так как есть.
Моё мнение это плохое решение давать "гостям" хоть что... сейчас 16ый год, конец. У каждого есть почта вконтакте одноклассники и прочего... Лучше сделать авторизацию с помощью соц сетей и уже не усложнять контроллеры. Если человеку сложно нажать 1ну кнопку войти через ...
Вы и сами к этому придете со временем, когда не сможете отфильтровать Анонимов от ботов.
Всего доброго и удачи!
далее топик контроллер
в каждом методе
if ( Auth::check() )
зачем так громоздить код?
middlware для этого служит
public function __construct()
{
$this->middleware('auth');
}
Неблагодарное это дело - писать паблик )))
Везде тролли найдутся, которые знаю всё, только нет у них ничего.
Короче... Хочешь идельно - форкай и дописывай, как знаешь, камить в оригинал.
я вас не троллил ни разу.
а причем тут вообще $fiilable ?
...Вы поспешили, не разобравшись.
это я что ли пытался провалидировать $forum_id ('forum_id' => 'required|integer')?
if ( !empty( $forum_id ) )
{
$Forum = Forum::find( $forum_id );
if ( !empty( $Forum ) )
{
$Topic = $Forum->topics()
это отсебятина... та еще.
Если мы присылаем какие либо данные мы обязаны их валидировать! Что мешает сделать хотя бы так
$Validator = Validator::make( [
'title' => $title,
'message' => $message,
'forum_id' => $forum_id,
], [
'title' => 'required|min:4|max:160|regex:\регулярное выражение\',
'message' => 'required|min:2|max:максимальное значение поля в таблице хотя бы|regex:\регулярное выражение\',
'forum_id' => 'required|integer|exists:имятаблицы,id',
] );
не стоит недооценивать валидацию!
2. Относительно того, что и в каком виде придёт на сервер, - я всё же не считаю себя лишённым интеллекта smile
3. Относительно что-где и как будет лежать в файлах и в бд - уже всё есть и работает, и даже стресс-тесты проходит посредством siege.
посмотрел я ваш код. Пожалуйста без обид, но валидации у вас нет. то что вы написали не валидация.
$Validator = Validator::make( [
'title' => $title,
'message' => $message,
'forum_id' => $forum_id,
], [
'title' => 'required|min:4|max:160',
'message' => 'required|min:2',
'forum_id' => 'required|integer',
] );
во первых я вам в title \ message могу такого прислать что потом не разгребете.
во вторых где проверка на forum_id ? а если я вам туда 2983749238473892 пришлю что тогда?
в третьих на кой чёрт валидацию делать в контроллере - вы про app\Http\Requests слышали?
в четвертых а что вы делать будете если ваш редактор вам пришлет на валидацию что то типо этого(ну или прочих подлянок)
<a <a href="site" style="color:transparent;backgroungcolor:transparent;textdecoration:none"> href='#'>безобидный текст</a>
3. Относительно что-где и как будет лежать в файлах и в бд - уже всё есть и работает, и даже стресс-тесты проходит посредством siege.
вот то что у вас проходят стресс тесты не показатель... ни разу.
Все еще нуждаюсь в помощи
ии еще... где хоть посмотреть на код, на форум. Я еще слабо представляю как и что вы пытаетесь сделать...
Смотрите. Я вам не говорил что вам не следует использовать 2000% редакторы. Вы пишите форум. подключить редактор это 2 строчки в <head> и пара строчек в <body> всё... Это правда не проблема. Просто я сталкивался уже, есть поговорка хочешь сделать что то хорошо сделай сам, намучившись я выкинул этих монстров, которые криво еще и работают и не применимы на мобильных девайсах в полной мере. В итоге riot+jquery и div contenteditable заняло меньше времени чем попытки понять а какого фига опять не работает и где какой скрипт мешает. Сейчас на дворе уже конец 16ого года. Ради интереса зайдите на какой нибудь популярный форум - сколько людей используют редакторы 1% , остальные тупо текст, ибо люди ленивы, и не надо их пытаться переучить, не выйдет.
Тут дело еще вот в чем - вы делаете форум и среди програмистов - естественно им удобнее редактор. Однако те люди что будут использовать форум ну не обязательно программисты(ну как я например) и этой аудитории как пользователям еще и в редакторе разбираться, ну проблема та еще.
Поэтому если будет редактор - это хорошо, да пусть будет. Однако не стоит подстраиваться под чужие технологии, подстраивать свою серверную часть... и не стоит пытаться сделать еще один IPB или phpBB, они морально старые.
Причем тут это? Я высказал свое мнение основываясь на своем опыте. У вас простите серверная часть готова? Нет не готова. Я так скажу редактор вам сделают за один день на базе какого нибудь существующего. Цена вопроса максимум 5тр. Вы вообще принцип работы представляете ? Вам на сервер придет куча текста с div a p span и прочего(притом насуют такого туда что офигеете). И самое важное это разгрести это. А вообще для начала вы имеете представление что и в каком виде вы будите хранить в базе данных? Как хранить приложения(фото, ссылки?). Не очень понимаю теперь цель проекта. Угодить всем не выйдет. Вы пишете форум только для того что бы написать его? Я вам с расстрою. Таких форумов полно. Этим форумы из начала 00ых и морально устарели. И тупо копировать все как у IPB нет смысла никакого. должна быть фишка, изюминка. Того чего не было нигде. И то что будет удобно.
Пока вывод один. Вы пытаетесь объять не обьятное.
Вот просто по опыту знаю. Что разгрести то что приходит от редакторов ну то ещё занятие. В итоге я плюнул и сделал своё решение для bb и смайлов.
Опять же моё мнение - на том этапе что находится проект нецелесообразно тратить время на эти редакторы, когда других забот вагон. А не проще ли продумать со стороны сервера что вообще должно в итоге попадать в таблицу и сделать нормальную валидацию данных что придут с браузера. А прикрутить редактор это уже совсем другая опера.
Если нужна ббкод то и наличие редактора то не нужно. Достаточно div contenteditable и с серверной стороны уже обрабатывать ббкод. Я вообще противник всех редакторов ибо проблем от них больше чем пользы.
так то да! что знаешь на том и быстрее выходит.
после использования многих форумов, хотельось бы простое прикрепление аттачментов аля вконтакте. типо фото\ссылка опрос.
У себя на сайте это реализовал через PolyMorh attachable.
просто почему спросил про riot. я себе сделал начальную реализацию медиа менеджера на riot+jquery. Отсилы за часов 20 сделал.
Идея мне очень нравится! С удовольствием поучаствовал бы. Как раз нужен форумный движок.
простите... А можно вопрос? А почему выбор пал на vue/jquery а не react\riot + jquery?