Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » TokenMismatchException VerifyCsrfToken » 24.06.2017 14:00:33

Мета csrf и ajax setup давно сделаны ибо все работало ж как то.

Ребят вообщем. Проблема решилась. Что то случилось с кодом самого фреймворка. Каким то образом повредились файлы. Хз как такое возможно. Но все вылечилось установкой заново самого фремфорка.

И все заработало... не трогая не строчки кода... мистика.

Спасибо огромное ;-)

#2 Laravel 5.x » TokenMismatchException VerifyCsrfToken » 24.06.2017 04:19:16

fagtr
Ответов: 3

Странная штука приключилась.

Всё работало долгое время.
Начались проблемы как то странно. Нужно было добавить пару значений возвращаемых после 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 Re: Laravel 5.x » Eager loading и limit на количество записей » 26.03.2017 19:00:48

Мда... Боюсь придется так оставить.

Сейчас сами категории закешированы. А вот посты не закешировать никак(хотя сам пост как единица закеширована). Нужна актуальность постов с точностью до минуты.

#4 Laravel 5.x » Eager loading и limit на количество записей » 26.03.2017 15:56:35

fagtr
Ответов: 2

Вообщем проблема.  Необходимо загрузить все категории с постами, но количество постов в каждой категории ограничить например 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){
///////////////////////////////////////
}
}			

#5 Re: Laravel 5.x » Request вручную » 03.01.2017 15:48:57

Вообщем нашел таки я решение... Если кому то еще понадобиться вручную работать с 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);

#6 Re: Laravel 5.x » Request вручную » 03.01.2017 15:41:01

вопрос пока открыт как вручную сделать Request что бы его потом передать в контроллер

#7 Re: Laravel 5.x » Request вручную » 03.01.2017 14:12:05

к сожалению мне не  достаточно еще и создать запись. в методе стор еще кучу всего приходится делать(возможно я и не прав что это делаю именно в контроллере)

    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();
    }

#8 Re: Laravel 5.x » Request вручную » 03.01.2017 14:01:50

я вас понял спасибо.

Но тут есть одно но...

вы правильно сказали что структура левая. Она абсолютно левая.
на основе данных что приходят я могу сгенерировать массив.
Но мне его нужно валидировать. Так как самому богу известно что туда может попасть.
И вот как мне сделать валидацию?

$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();
    }

#9 Re: Laravel 5.x » Request вручную » 03.01.2017 13:44:54

Что бы было понятно напишу немного подробнее что я хочу что бы было

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);
}

}

#10 Re: Laravel 5.x » Request вручную » 03.01.2017 13:36:04

Выноси создание одного поста в модель, буквально сегодня на похожий вопрос ответил. А еще лучше, выноси в модель и используй 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 отдельных запросов.

можно пример?

#11 Laravel 5.x » Request вручную » 03.01.2017 11:29:21

fagtr
Ответов: 8

Добрый день дорогие форумчане. С новым всех годом!

Помогите пожалуйста решить задачку.
Смотрите.
У меня есть 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

Спасибо за помощь!

#12 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 21:12:04

Вполне себе нормальная конструкция (предпочитаю auth()->check()). В Middleware разумно делать логику, когда нужно отсечь часть пользователей от каких-либо маршрутов. Если нужно проверить авторизован пользователь или нет "здесь и сейчас", то как еще это делать?

я полностью согласен с вами, если здесь и сейчас то да  auth()->check() незаменим.
но в топик контроллере у автора в каждом методе auth()->check(), и как то сильно нагромаждено, вот я и предложил уже реализованный middleware auth.

#13 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 16:50:37

Вы вообще адекватный? Я с вами нормально разговаривал. И высказывал свое мнение. Так же вам я указал на явные ошибки.
Вы говорите я вас идиотом выставил?

Вы публично выставляете меня идиотом на стадии разработки с черновым кодом, не это ли троллинг?

Извините, но идиотом выставили вы сами себя и отбили желание многих вокруг вас вам что то вообще говорить и советовать!

Хренею от палемики ни о чём.

Это счас была попытка строллить меня с уклоном в обидку?

Прочёл много букв

на хамство перешли вы

Пришёл, нагадил, хлопнул дверью и был таков!

Удачи, не спотКнись!)

#14 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 16:08:31

Вполне логичная схема.

Я бы поспорил. Но это бестолку - вы всё решили.
Удачи в разработке - она вам пригодится!

PS

Однако в недалёком будущем я планирую сделать пользователя "гость", и перенести все валидации на механику ->can(), но пока будет именно так как есть.

Моё мнение это плохое решение давать "гостям" хоть что... сейчас 16ый год, конец. У каждого есть почта вконтакте одноклассники и прочего... Лучше сделать авторизацию с помощью соц сетей и уже не усложнять контроллеры. Если человеку сложно нажать 1ну кнопку войти через ...
Вы и сами к этому придете со временем, когда не сможете отфильтровать Анонимов от ботов.

Всего доброго и удачи!

#15 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 13:51:27

далее топик контроллер
в каждом методе

if ( Auth::check() )

зачем так громоздить код?

middlware для этого служит

 public function __construct()
    {
        $this->middleware('auth');
    }

Неблагодарное это дело - писать паблик )))
Везде тролли найдутся, которые знаю всё, только нет у них ничего.
Короче... Хочешь идельно - форкай и дописывай, как знаешь, камить в оригинал.

я вас не троллил ни разу.

#16 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 12:49:15

а причем тут вообще $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',
		] );

не стоит недооценивать валидацию!

#17 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 17.12.2016 11:24:26

hzone пишет:

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>
hzone пишет:

3. Относительно что-где и как будет лежать в файлах и в бд - уже всё есть и работает, и даже стресс-тесты проходит посредством siege.

вот то что у вас проходят стресс тесты не показатель... ни разу.

#19 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 16.12.2016 21:14:41

ии еще... где хоть посмотреть на код, на форум. Я еще слабо представляю как и что вы пытаетесь сделать...

#20 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 16.12.2016 21:12:17

Смотрите. Я вам не говорил что вам не следует использовать 2000% редакторы. Вы пишите форум. подключить редактор это 2 строчки в <head> и пара строчек в <body> всё... Это правда не проблема. Просто я сталкивался уже, есть поговорка хочешь сделать что то хорошо сделай сам, намучившись я выкинул этих монстров, которые криво еще и работают и не применимы на мобильных девайсах в полной мере. В итоге riot+jquery и div contenteditable заняло меньше времени чем попытки понять а какого фига опять не работает и где какой скрипт мешает. Сейчас на дворе уже конец 16ого года. Ради интереса зайдите на какой нибудь популярный форум - сколько людей используют редакторы 1% , остальные тупо текст, ибо люди ленивы, и не надо их пытаться переучить, не выйдет.

Тут дело еще вот в чем - вы делаете форум и среди програмистов - естественно им удобнее редактор. Однако те люди что будут использовать форум ну не обязательно программисты(ну как я например) и этой аудитории как пользователям еще и в редакторе разбираться, ну проблема та еще.

Поэтому если будет редактор - это хорошо, да пусть будет. Однако не стоит подстраиваться под чужие технологии, подстраивать свою серверную часть... и не стоит пытаться сделать еще один IPB или phpBB, они морально старые.

#21 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 16.12.2016 13:35:56

Причем тут это? Я высказал свое мнение основываясь на своем опыте. У вас простите серверная часть готова? Нет не готова. Я так скажу редактор вам сделают за один день на базе какого нибудь существующего. Цена вопроса максимум 5тр.  Вы вообще принцип работы представляете ? Вам на сервер придет куча текста с div a p span и прочего(притом насуют такого туда что офигеете). И самое важное это разгрести это. А вообще для начала вы имеете представление что и в каком виде вы будите хранить в базе данных? Как хранить приложения(фото, ссылки?). Не очень понимаю теперь цель проекта. Угодить всем не выйдет. Вы пишете форум только для того что бы написать его? Я вам с расстрою. Таких форумов полно. Этим форумы из начала 00ых и морально устарели. И тупо копировать все как у IPB нет смысла никакого. должна быть фишка, изюминка. Того чего не было нигде. И то что будет удобно.

Пока вывод один. Вы пытаетесь объять не обьятное.

#22 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 16.12.2016 11:09:25

Вот просто по опыту знаю. Что разгрести то что приходит от редакторов ну то ещё занятие. В итоге я плюнул и сделал своё решение для bb и смайлов.

Опять же моё мнение - на том  этапе что находится проект нецелесообразно тратить время на эти редакторы, когда других забот вагон. А не проще ли продумать со стороны сервера что вообще должно в итоге попадать в таблицу и сделать нормальную валидацию данных что придут с браузера. А прикрутить редактор это уже совсем другая опера.

#23 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 16.12.2016 06:03:59

Если нужна ббкод то и наличие редактора то не нужно. Достаточно div contenteditable и с серверной стороны уже обрабатывать ббкод. Я вообще противник всех редакторов ибо проблем от них больше чем пользы.

#24 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 12.12.2016 16:14:17

так то да! что знаешь на том и быстрее выходит.

после использования многих форумов, хотельось бы простое прикрепление аттачментов аля вконтакте. типо фото\ссылка опрос.
У себя на сайте это реализовал через PolyMorh attachable.

просто почему спросил про riot. я себе сделал начальную  реализацию медиа менеджера на riot+jquery. Отсилы за часов 20 сделал.

Тест BBcode

#25 Re: Laravel 5.x » Начал писать Форум для L5.3+ Кто хочет участвовать? » 12.12.2016 11:08:43

Идея мне очень нравится! С удовольствием поучаствовал бы. Как раз нужен форумный движок.

простите... А можно вопрос? А почему выбор пал на vue/jquery а не react\riot + jquery?

Подвал раздела