[{"data":1,"prerenderedAt":3497},["ShallowReactive",2],{"navigation":3,"\u002F2.x\u002Fdigging-deeper\u002Factions":307,"\u002F2.x\u002Fdigging-deeper\u002Factions-surround":3492},{"3.x":4,"2.x":203},[5,32,61,99,121,147,165],{"title":6,"icon":7,"path":8,"stem":9,"children":10,"page":31},"Getting Started","i-heroicons-star","\u002Fgetting-started","1.getting-started",[11,15,19,23,27],{"title":12,"path":13,"stem":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":16,"path":17,"stem":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":20,"path":21,"stem":22},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":24,"path":25,"stem":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration",{"title":28,"path":29,"stem":30},"Upgrade guide","\u002Fgetting-started\u002Fupgrade-guide","1.getting-started\u002F5.upgrade-guide",false,{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":31},"Resources","i-heroicons-document-text","\u002Fresources","2.resources",[38,41,45,49,53,57],{"title":33,"path":39,"stem":40},"\u002Fresources\u002Fresources","2.resources\u002F1.resources",{"title":42,"path":43,"stem":44},"Fields","\u002Fresources\u002Ffields","2.resources\u002F2.fields",{"title":46,"path":47,"stem":48},"Relationships","\u002Fresources\u002Frelations","2.resources\u002F3.relations",{"title":50,"path":51,"stem":52},"Validation","\u002Fresources\u002Fvalidation","2.resources\u002F4.validation",{"title":54,"path":55,"stem":56},"Perimeter","\u002Fresources\u002Fperimeter","2.resources\u002F5.perimeter",{"title":58,"path":59,"stem":60},"Limits","\u002Fresources\u002Flimits","2.resources\u002F6.limits",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":31},"Search","i-heroicons-magnifying-glass","\u002Fsearch","3.search",[67,71,75,79,83,87,91,95],{"title":68,"path":69,"stem":70},"Search overview","\u002Fsearch\u002Foverview","3.search\u002F1.overview",{"title":72,"path":73,"stem":74},"Search filters","\u002Fsearch\u002Ffilters","3.search\u002F2.filters",{"title":76,"path":77,"stem":78},"Sorts and selects","\u002Fsearch\u002Fsorts-and-selects","3.search\u002F3.sorts-and-selects",{"title":80,"path":81,"stem":82},"Includes and aggregates","\u002Fsearch\u002Fincludes-and-aggregates","3.search\u002F4.includes-and-aggregates",{"title":84,"path":85,"stem":86},"Scopes and instructions","\u002Fsearch\u002Fscopes-and-instructions","3.search\u002F5.scopes-and-instructions",{"title":88,"path":89,"stem":90},"Text search","\u002Fsearch\u002Ftext-search","3.search\u002F6.text-search",{"title":92,"path":93,"stem":94},"Search engines","\u002Fsearch\u002Fsearch-engines","3.search\u002F7.search-engines",{"title":96,"path":97,"stem":98},"Searching outside HTTP","\u002Fsearch\u002Foutside-http","3.search\u002F8.outside-http",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":31},"Writing","i-heroicons-pencil-square","\u002Fwriting","4.writing",[105,109,113,117],{"title":106,"path":107,"stem":108},"Mutate","\u002Fwriting\u002Fmutate","4.writing\u002F1.mutate",{"title":110,"path":111,"stem":112},"Writing relations","\u002Fwriting\u002Frelations","4.writing\u002F2.relations",{"title":114,"path":115,"stem":116},"Versioned rows","\u002Fwriting\u002Fversioned-rows","4.writing\u002F3.versioned-rows",{"title":118,"path":119,"stem":120},"Deleting and restoring","\u002Fwriting\u002Fdeleting","4.writing\u002F4.deleting",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":31},"Actions and Metrics","i-heroicons-bolt","\u002Factions-and-metrics","5.actions-and-metrics",[127,131,135,139,143],{"title":128,"path":129,"stem":130},"Actions","\u002Factions-and-metrics\u002Factions","5.actions-and-metrics\u002F1.actions",{"title":132,"path":133,"stem":134},"Queued Actions","\u002Factions-and-metrics\u002Fqueued-actions","5.actions-and-metrics\u002F2.queued-actions",{"title":136,"path":137,"stem":138},"Confirmation","\u002Factions-and-metrics\u002Fconfirmation","5.actions-and-metrics\u002F3.confirmation",{"title":140,"path":141,"stem":142},"Metrics","\u002Factions-and-metrics\u002Fmetrics","5.actions-and-metrics\u002F4.metrics",{"title":144,"path":145,"stem":146},"Exports","\u002Factions-and-metrics\u002Fexports","5.actions-and-metrics\u002F5.exports",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":31},"Authorization","i-heroicons-lock-closed","\u002Fauthorization","6.authorization",[153,157,161],{"title":154,"path":155,"stem":156},"Policies","\u002Fauthorization\u002Fpolicies","6.authorization\u002F1.policies",{"title":158,"path":159,"stem":160},"Gates","\u002Fauthorization\u002Fgates","6.authorization\u002F2.gates",{"title":162,"path":163,"stem":164},"Decision Cache","\u002Fauthorization\u002Fdecision-cache","6.authorization\u002F3.decision-cache",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":31},"Digging Deeper","i-heroicons-list-bullet","\u002Fdigging-deeper","7.digging-deeper",[171,175,179,183,187,191,195,199],{"title":172,"path":173,"stem":174},"Details","\u002Fdigging-deeper\u002Fdetails","7.digging-deeper\u002F1.details",{"title":176,"path":177,"stem":178},"Events and Hooks","\u002Fdigging-deeper\u002Fevents-and-hooks","7.digging-deeper\u002F2.events-and-hooks",{"title":180,"path":181,"stem":182},"Custom Responses","\u002Fdigging-deeper\u002Fresponses","7.digging-deeper\u002F3.responses",{"title":184,"path":185,"stem":186},"OpenAPI Documentation","\u002Fdigging-deeper\u002Fopenapi","7.digging-deeper\u002F4.openapi",{"title":188,"path":189,"stem":190},"Precognition","\u002Fdigging-deeper\u002Fprecognition","7.digging-deeper\u002F5.precognition",{"title":192,"path":193,"stem":194},"Artisan Commands","\u002Fdigging-deeper\u002Fartisan","7.digging-deeper\u002F6.artisan",{"title":196,"path":197,"stem":198},"Laravel Boost Skill","\u002Fdigging-deeper\u002Fai-skill","7.digging-deeper\u002F7.ai-skill",{"title":200,"path":201,"stem":202},"Translations","\u002Fdigging-deeper\u002Ftranslations","7.digging-deeper\u002F8.translations",[204,215,237,260,297],{"title":6,"icon":7,"path":205,"stem":206,"children":207,"page":31},"\u002F2.x\u002Fgetting-started","2.x\u002F1.getting-started",[208,211],{"title":16,"path":209,"stem":210},"\u002F2.x\u002Fgetting-started\u002Finstallation","2.x\u002F1.getting-started\u002F1.installation",{"title":212,"path":213,"stem":214},"Upgrade Guide","\u002F2.x\u002Fgetting-started\u002Fupgrade-guide","2.x\u002F1.getting-started\u002F2.upgrade-guide",{"title":216,"icon":217,"path":218,"stem":219,"children":220,"page":31},"Endpoints","i-heroicons-arrow-uturn-left","\u002F2.x\u002Fendpoints","2.x\u002F2.endpoints",[221,224,227,230,233],{"title":172,"path":222,"stem":223},"\u002F2.x\u002Fendpoints\u002Fdetails","2.x\u002F2.endpoints\u002F1.details",{"title":62,"path":225,"stem":226},"\u002F2.x\u002Fendpoints\u002Fsearch","2.x\u002F2.endpoints\u002F2.search",{"title":106,"path":228,"stem":229},"\u002F2.x\u002Fendpoints\u002Fmutate","2.x\u002F2.endpoints\u002F3.mutate",{"title":128,"path":231,"stem":232},"\u002F2.x\u002Fendpoints\u002Factions","2.x\u002F2.endpoints\u002F4.actions",{"title":234,"path":235,"stem":236},"Delete","\u002F2.x\u002Fendpoints\u002Fdelete","2.x\u002F2.endpoints\u002F5.delete",{"title":33,"icon":34,"path":238,"stem":239,"children":240,"page":31},"\u002F2.x\u002Fresources","2.x\u002F3.resources",[241,245,249,252,256],{"title":242,"path":243,"stem":244},"Basics","\u002F2.x\u002Fresources\u002Fbasics","2.x\u002F3.resources\u002F1.basics",{"title":246,"path":247,"stem":248},"Exposed Data","\u002F2.x\u002Fresources\u002Fexposed-data","2.x\u002F3.resources\u002F2.exposed-data",{"title":46,"path":250,"stem":251},"\u002F2.x\u002Fresources\u002Frelationships","2.x\u002F3.resources\u002F3.relationships",{"title":253,"path":254,"stem":255},"Validations","\u002F2.x\u002Fresources\u002Fvalidations","2.x\u002F3.resources\u002F4.validations",{"title":257,"path":258,"stem":259},"Interactions","\u002F2.x\u002Fresources\u002Finteractions","2.x\u002F3.resources\u002F5.interactions",{"title":166,"icon":167,"path":261,"stem":262,"children":263,"page":31},"\u002F2.x\u002Fdigging-deeper","2.x\u002F4.digging-deeper",[264,267,271,274,278,282,286,290,294],{"title":128,"path":265,"stem":266},"\u002F2.x\u002Fdigging-deeper\u002Factions","2.x\u002F4.digging-deeper\u002F1.actions",{"title":268,"path":269,"stem":270},"Hooks","\u002F2.x\u002Fdigging-deeper\u002Fhooks","2.x\u002F4.digging-deeper\u002F2.hooks",{"title":158,"path":272,"stem":273},"\u002F2.x\u002Fdigging-deeper\u002Fgates","2.x\u002F4.digging-deeper\u002F3.gates",{"title":275,"path":276,"stem":277},"Authorizations","\u002F2.x\u002Fdigging-deeper\u002Fauthorizations","2.x\u002F4.digging-deeper\u002F4.authorizations",{"title":279,"path":280,"stem":281},"Full Text Search","\u002F2.x\u002Fdigging-deeper\u002Ffull-text-search","2.x\u002F4.digging-deeper\u002F5.full-text-search",{"title":283,"path":284,"stem":285},"Instructions","\u002F2.x\u002Fdigging-deeper\u002Finstructions","2.x\u002F4.digging-deeper\u002F6.instructions",{"title":287,"path":288,"stem":289},"Responses","\u002F2.x\u002Fdigging-deeper\u002Fresponses","2.x\u002F4.digging-deeper\u002F7.responses",{"title":291,"path":292,"stem":293},"Documentation","\u002F2.x\u002Fdigging-deeper\u002Fdocumentation","2.x\u002F4.digging-deeper\u002F8.documentation",{"title":188,"path":295,"stem":296},"\u002F2.x\u002Fdigging-deeper\u002Fprecognition","2.x\u002F4.digging-deeper\u002F9.precognition",{"title":298,"icon":299,"path":300,"stem":301,"children":302,"page":31},"Integrations","i-lucide-puzzle","\u002F2.x\u002Fintegrations","2.x\u002F5.integrations",[303],{"title":304,"path":305,"stem":306},"Flutter","\u002F2.x\u002Fintegrations\u002Fflutter","2.x\u002F5.integrations\u002F1.flutter",{"id":308,"title":128,"body":309,"description":3486,"extension":3487,"links":3488,"meta":3489,"navigation":398,"path":265,"seo":3490,"stem":266,"__hash__":3491},"docs2x\u002F2.x\u002F4.digging-deeper\u002F1.actions.md",{"type":310,"value":311,"toc":3472},"minimark",[312,316,321,333,361,364,974,984,991,995,998,1133,1137,1140,1327,1329,1332,1596,1599,1609,1653,1657,1669,1676,1751,1754,1903,1907,1914,2075,2086,2280,2288,2292,2302,2544,2548,2557,2875,2882,2888,2898,2902,2913,2918,3047,3051,3068,3197,3203,3311,3319,3330,3444,3460,3468],[313,314,315],"p",{},"Your resource automatically exposes the actions you have defined on it. Configure them, register them and you are done !",[317,318,320],"h2",{"id":319},"overview","Overview",[313,322,323,324,328,329,332],{},"Actions can be generated using the ",[325,326,327],"code",{},"rest:action"," Artisan command. By default, every action is placed in your ",[325,330,331],{},"App\\Rest\\Actions"," directory.",[334,335,340],"pre",{"className":336,"code":337,"language":338,"meta":339,"style":339},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan rest:action SendWelcomeNotificationAction\n","bash","",[325,341,342],{"__ignoreMap":339},[343,344,347,351,355,358],"span",{"class":345,"line":346},"line",1,[343,348,350],{"class":349},"sBMFI","php",[343,352,354],{"class":353},"sfazB"," artisan",[343,356,357],{"class":353}," rest:action",[343,359,360],{"class":353}," SendWelcomeNotificationAction\n",[313,362,363],{},"You are now ready to configure your action:",[334,365,368],{"className":366,"code":367,"language":350,"meta":339,"style":339},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","namespace App\\Rest\\Actions;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Lomkit\\Rest\\Http\\Requests\\RestRequest;\n\nclass SendWelcomeNotificationAction extends Action\n{\n    \u002F**\n     * Perform the action on the given models.\n     *\n     * @param  array  $fields\n     * @param  \\Illuminate\\Support\\Collection  $models\n     * @return mixed\n     *\u002F\n    public function handle(array $fields, \\Illuminate\\Support\\Collection $models)\n    {\n        foreach ($models as $model) {\n            $model->notify(new \\App\\Notifications\\SendWelcomeNotification($fields['expires_at']))\n                ->delay($this->resource instanceof \\App\\Rest\\UserResource ? 50 : 0);\n        }\n    }\n\n    \u002F**\n     * The action fields.\n     *\n     * @param  \\Lomkit\\Rest\\Http\\Requests\\RestRequest $request\n     * @return array\n     *\u002F\n    public function fields(\\Lomkit\\Rest\\Http\\Requests\\RestRequest $request)\n    {\n        return [\n            'expires_at' => [\n                'required', 'date'\n            ]\n        ];\n    }\n}\n",[325,369,370,393,400,427,446,469,497,502,518,524,531,537,543,559,586,597,603,652,658,684,737,783,789,795,800,805,811,816,847,857,862,900,905,914,929,951,957,963,968],{"__ignoreMap":339},[343,371,372,376,379,383,386,388,390],{"class":345,"line":346},[343,373,375],{"class":374},"sbssI","namespace",[343,377,378],{"class":349}," App",[343,380,382],{"class":381},"sMK4o","\\",[343,384,385],{"class":349},"Rest",[343,387,382],{"class":381},[343,389,128],{"class":349},[343,391,392],{"class":381},";\n",[343,394,396],{"class":345,"line":395},2,[343,397,399],{"emptyLinePlaceholder":398},true,"\n",[343,401,403,406,410,412,415,417,420,422,425],{"class":345,"line":402},3,[343,404,405],{"class":374},"use",[343,407,409],{"class":408},"sTEyZ"," Illuminate",[343,411,382],{"class":381},[343,413,414],{"class":408},"Database",[343,416,382],{"class":381},[343,418,419],{"class":408},"Eloquent",[343,421,382],{"class":381},[343,423,424],{"class":408},"Model",[343,426,392],{"class":381},[343,428,430,432,434,436,439,441,444],{"class":345,"line":429},4,[343,431,405],{"class":374},[343,433,409],{"class":408},[343,435,382],{"class":381},[343,437,438],{"class":408},"Support",[343,440,382],{"class":381},[343,442,443],{"class":408},"Collection",[343,445,392],{"class":381},[343,447,449,451,454,456,458,460,462,464,467],{"class":345,"line":448},5,[343,450,405],{"class":374},[343,452,453],{"class":408}," Lomkit",[343,455,382],{"class":381},[343,457,385],{"class":408},[343,459,382],{"class":381},[343,461,128],{"class":408},[343,463,382],{"class":381},[343,465,466],{"class":408},"Action",[343,468,392],{"class":381},[343,470,472,474,476,478,480,482,485,487,490,492,495],{"class":345,"line":471},6,[343,473,405],{"class":374},[343,475,453],{"class":408},[343,477,382],{"class":381},[343,479,385],{"class":408},[343,481,382],{"class":381},[343,483,484],{"class":408},"Http",[343,486,382],{"class":381},[343,488,489],{"class":408},"Requests",[343,491,382],{"class":381},[343,493,494],{"class":408},"RestRequest",[343,496,392],{"class":381},[343,498,500],{"class":345,"line":499},7,[343,501,399],{"emptyLinePlaceholder":398},[343,503,505,509,512,515],{"class":345,"line":504},8,[343,506,508],{"class":507},"spNyl","class",[343,510,511],{"class":349}," SendWelcomeNotificationAction",[343,513,514],{"class":507}," extends",[343,516,517],{"class":349}," Action\n",[343,519,521],{"class":345,"line":520},9,[343,522,523],{"class":381},"{\n",[343,525,527],{"class":345,"line":526},10,[343,528,530],{"class":529},"sHwdD","    \u002F**\n",[343,532,534],{"class":345,"line":533},11,[343,535,536],{"class":529},"     * Perform the action on the given models.\n",[343,538,540],{"class":345,"line":539},12,[343,541,542],{"class":529},"     *\n",[343,544,546,549,553,556],{"class":345,"line":545},13,[343,547,548],{"class":529},"     * ",[343,550,552],{"class":551},"svl4J","@param",[343,554,555],{"class":551},"  array",[343,557,558],{"class":529},"  $fields\n",[343,560,562,564,566,570,574,576,578,580,583],{"class":345,"line":561},14,[343,563,548],{"class":529},[343,565,552],{"class":551},[343,567,569],{"class":568},"s7zQu","  \\",[343,571,573],{"class":572},"sHdIc","Illuminate",[343,575,382],{"class":568},[343,577,438],{"class":572},[343,579,382],{"class":568},[343,581,443],{"class":582},"sFweD",[343,584,585],{"class":529},"  $models\n",[343,587,589,591,594],{"class":345,"line":588},15,[343,590,548],{"class":529},[343,592,593],{"class":551},"@return",[343,595,596],{"class":551}," mixed\n",[343,598,600],{"class":345,"line":599},16,[343,601,602],{"class":529},"     *\u002F\n",[343,604,606,609,612,616,619,622,625,628,631,634,636,638,640,642,644,646,649],{"class":345,"line":605},17,[343,607,608],{"class":507},"    public",[343,610,611],{"class":507}," function",[343,613,615],{"class":614},"s2Zo4"," handle",[343,617,618],{"class":381},"(",[343,620,621],{"class":374},"array",[343,623,624],{"class":381}," $",[343,626,627],{"class":408},"fields",[343,629,630],{"class":381},",",[343,632,633],{"class":381}," \\",[343,635,573],{"class":408},[343,637,382],{"class":381},[343,639,438],{"class":408},[343,641,382],{"class":381},[343,643,443],{"class":349},[343,645,624],{"class":381},[343,647,648],{"class":408},"models",[343,650,651],{"class":381},")\n",[343,653,655],{"class":345,"line":654},18,[343,656,657],{"class":381},"    {\n",[343,659,661,664,667,670,673,675,678,681],{"class":345,"line":660},19,[343,662,663],{"class":568},"        foreach",[343,665,666],{"class":381}," ($",[343,668,669],{"class":408},"models ",[343,671,672],{"class":381},"as",[343,674,624],{"class":381},[343,676,677],{"class":408},"model",[343,679,680],{"class":381},")",[343,682,683],{"class":381}," {\n",[343,685,687,690,692,695,698,700,703,705,708,710,713,715,718,721,723,726,729,732,734],{"class":345,"line":686},20,[343,688,689],{"class":381},"            $",[343,691,677],{"class":408},[343,693,694],{"class":381},"->",[343,696,697],{"class":614},"notify",[343,699,618],{"class":381},[343,701,702],{"class":374},"new",[343,704,633],{"class":381},[343,706,707],{"class":408},"App",[343,709,382],{"class":381},[343,711,712],{"class":408},"Notifications",[343,714,382],{"class":381},[343,716,717],{"class":349},"SendWelcomeNotification",[343,719,720],{"class":381},"($",[343,722,627],{"class":408},[343,724,725],{"class":381},"[",[343,727,728],{"class":381},"'",[343,730,731],{"class":353},"expires_at",[343,733,728],{"class":381},[343,735,736],{"class":381},"]))\n",[343,738,740,743,746,749,752,755,757,759,761,763,765,768,771,774,777,780],{"class":345,"line":739},21,[343,741,742],{"class":381},"                ->",[343,744,745],{"class":614},"delay",[343,747,748],{"class":381},"($this->",[343,750,751],{"class":408},"resource ",[343,753,754],{"class":381},"instanceof",[343,756,633],{"class":381},[343,758,707],{"class":408},[343,760,382],{"class":381},[343,762,385],{"class":408},[343,764,382],{"class":381},[343,766,767],{"class":349},"UserResource",[343,769,770],{"class":381}," ?",[343,772,773],{"class":374}," 50",[343,775,776],{"class":381}," :",[343,778,779],{"class":374}," 0",[343,781,782],{"class":381},");\n",[343,784,786],{"class":345,"line":785},22,[343,787,788],{"class":381},"        }\n",[343,790,792],{"class":345,"line":791},23,[343,793,794],{"class":381},"    }\n",[343,796,798],{"class":345,"line":797},24,[343,799,399],{"emptyLinePlaceholder":398},[343,801,803],{"class":345,"line":802},25,[343,804,530],{"class":529},[343,806,808],{"class":345,"line":807},26,[343,809,810],{"class":529},"     * The action fields.\n",[343,812,814],{"class":345,"line":813},27,[343,815,542],{"class":529},[343,817,819,821,823,825,828,830,832,834,836,838,840,842,844],{"class":345,"line":818},28,[343,820,548],{"class":529},[343,822,552],{"class":551},[343,824,569],{"class":568},[343,826,827],{"class":572},"Lomkit",[343,829,382],{"class":568},[343,831,385],{"class":572},[343,833,382],{"class":568},[343,835,484],{"class":572},[343,837,382],{"class":568},[343,839,489],{"class":572},[343,841,382],{"class":568},[343,843,494],{"class":582},[343,845,846],{"class":529}," $request\n",[343,848,850,852,854],{"class":345,"line":849},29,[343,851,548],{"class":529},[343,853,593],{"class":551},[343,855,856],{"class":551}," array\n",[343,858,860],{"class":345,"line":859},30,[343,861,602],{"class":529},[343,863,865,867,869,872,875,877,879,881,883,885,887,889,891,893,895,898],{"class":345,"line":864},31,[343,866,608],{"class":507},[343,868,611],{"class":507},[343,870,871],{"class":614}," fields",[343,873,874],{"class":381},"(\\",[343,876,827],{"class":408},[343,878,382],{"class":381},[343,880,385],{"class":408},[343,882,382],{"class":381},[343,884,484],{"class":408},[343,886,382],{"class":381},[343,888,489],{"class":408},[343,890,382],{"class":381},[343,892,494],{"class":349},[343,894,624],{"class":381},[343,896,897],{"class":408},"request",[343,899,651],{"class":381},[343,901,903],{"class":345,"line":902},32,[343,904,657],{"class":381},[343,906,908,911],{"class":345,"line":907},33,[343,909,910],{"class":568},"        return",[343,912,913],{"class":381}," [\n",[343,915,917,920,922,924,927],{"class":345,"line":916},34,[343,918,919],{"class":381},"            '",[343,921,731],{"class":353},[343,923,728],{"class":381},[343,925,926],{"class":381}," =>",[343,928,913],{"class":381},[343,930,932,935,938,940,942,945,948],{"class":345,"line":931},35,[343,933,934],{"class":381},"                '",[343,936,937],{"class":353},"required",[343,939,728],{"class":381},[343,941,630],{"class":381},[343,943,944],{"class":381}," '",[343,946,947],{"class":353},"date",[343,949,950],{"class":381},"'\n",[343,952,954],{"class":345,"line":953},36,[343,955,956],{"class":381},"            ]\n",[343,958,960],{"class":345,"line":959},37,[343,961,962],{"class":381},"        ];\n",[343,964,966],{"class":345,"line":965},38,[343,967,794],{"class":381},[343,969,971],{"class":345,"line":970},39,[343,972,973],{"class":381},"}\n",[313,975,976,977,980,981,983],{},"In the ",[325,978,979],{},"handle"," method you receive a Collection of models. The models correspond to the resource the action has been registered on.\nYou are free to do whatever you want in this ",[325,982,979],{}," method: update records, send jobs, etc...",[313,985,986,987,990],{},"You can access the resource that launched the action by using ",[325,988,989],{},"$this->resource"," at any moment.",[317,992,994],{"id":993},"register-an-action","Register an action",[313,996,997],{},"To register an action, you simply need to specify it in your resource:",[334,999,1001],{"className":366,"code":1000,"language":350,"meta":339,"style":339},"use App\\Rest\\Actions\\SendWelcomeNotificationAction;\n\nclass UserResource extends Resource\n{\n    \u002F**\n     * The actions that should be linked\n     * @param RestRequest $request\n     * @return array\n     *\u002F\n    public function actions(RestRequest $request): array {\n        return [\n            SendWelcomeNotificationAction::make()\n        ];\n    }\n}\n",[325,1002,1003,1024,1028,1040,1044,1048,1053,1064,1072,1076,1101,1107,1121,1125,1129],{"__ignoreMap":339},[343,1004,1005,1007,1009,1011,1013,1015,1017,1019,1022],{"class":345,"line":346},[343,1006,405],{"class":374},[343,1008,378],{"class":408},[343,1010,382],{"class":381},[343,1012,385],{"class":408},[343,1014,382],{"class":381},[343,1016,128],{"class":408},[343,1018,382],{"class":381},[343,1020,1021],{"class":408},"SendWelcomeNotificationAction",[343,1023,392],{"class":381},[343,1025,1026],{"class":345,"line":395},[343,1027,399],{"emptyLinePlaceholder":398},[343,1029,1030,1032,1035,1037],{"class":345,"line":402},[343,1031,508],{"class":507},[343,1033,1034],{"class":349}," UserResource",[343,1036,514],{"class":507},[343,1038,1039],{"class":349}," Resource\n",[343,1041,1042],{"class":345,"line":429},[343,1043,523],{"class":381},[343,1045,1046],{"class":345,"line":448},[343,1047,530],{"class":529},[343,1049,1050],{"class":345,"line":471},[343,1051,1052],{"class":529},"     * The actions that should be linked\n",[343,1054,1055,1057,1059,1062],{"class":345,"line":499},[343,1056,548],{"class":529},[343,1058,552],{"class":551},[343,1060,1061],{"class":582}," RestRequest",[343,1063,846],{"class":529},[343,1065,1066,1068,1070],{"class":345,"line":504},[343,1067,548],{"class":529},[343,1069,593],{"class":551},[343,1071,856],{"class":551},[343,1073,1074],{"class":345,"line":520},[343,1075,602],{"class":529},[343,1077,1078,1080,1082,1085,1087,1089,1091,1093,1096,1099],{"class":345,"line":526},[343,1079,608],{"class":507},[343,1081,611],{"class":507},[343,1083,1084],{"class":614}," actions",[343,1086,618],{"class":381},[343,1088,494],{"class":349},[343,1090,624],{"class":381},[343,1092,897],{"class":408},[343,1094,1095],{"class":381},"):",[343,1097,1098],{"class":374}," array",[343,1100,683],{"class":381},[343,1102,1103,1105],{"class":345,"line":533},[343,1104,910],{"class":568},[343,1106,913],{"class":381},[343,1108,1109,1112,1115,1118],{"class":345,"line":539},[343,1110,1111],{"class":349},"            SendWelcomeNotificationAction",[343,1113,1114],{"class":381},"::",[343,1116,1117],{"class":614},"make",[343,1119,1120],{"class":381},"()\n",[343,1122,1123],{"class":345,"line":545},[343,1124,962],{"class":381},[343,1126,1127],{"class":345,"line":561},[343,1128,794],{"class":381},[343,1130,1131],{"class":345,"line":588},[343,1132,973],{"class":381},[1134,1135,275],"h3",{"id":1136},"authorizations",[313,1138,1139],{},"In case you don't want to expose your actions to all users, you simply need to condition this method:",[334,1141,1143],{"className":366,"code":1142,"language":350,"meta":339,"style":339},"use App\\Rest\\Actions\\SendWelcomeNotificationAction;\n\nclass UserResource extends Resource\n{\n    \u002F**\n     * The actions that should be linked\n     * @param RestRequest $request\n     * @return array\n     *\u002F\n    public function actions(RestRequest $request): array {\n        $actions = [];\n        \n        if ($request->user()->isAdministrator()) {\n            array_push($actions, SendWelcomeNotificationAction::make())\n        }\n    \n        return $actions;\n    }\n}\n",[325,1144,1145,1165,1169,1179,1183,1187,1191,1201,1209,1213,1235,1249,1254,1279,1300,1304,1309,1319,1323],{"__ignoreMap":339},[343,1146,1147,1149,1151,1153,1155,1157,1159,1161,1163],{"class":345,"line":346},[343,1148,405],{"class":374},[343,1150,378],{"class":408},[343,1152,382],{"class":381},[343,1154,385],{"class":408},[343,1156,382],{"class":381},[343,1158,128],{"class":408},[343,1160,382],{"class":381},[343,1162,1021],{"class":408},[343,1164,392],{"class":381},[343,1166,1167],{"class":345,"line":395},[343,1168,399],{"emptyLinePlaceholder":398},[343,1170,1171,1173,1175,1177],{"class":345,"line":402},[343,1172,508],{"class":507},[343,1174,1034],{"class":349},[343,1176,514],{"class":507},[343,1178,1039],{"class":349},[343,1180,1181],{"class":345,"line":429},[343,1182,523],{"class":381},[343,1184,1185],{"class":345,"line":448},[343,1186,530],{"class":529},[343,1188,1189],{"class":345,"line":471},[343,1190,1052],{"class":529},[343,1192,1193,1195,1197,1199],{"class":345,"line":499},[343,1194,548],{"class":529},[343,1196,552],{"class":551},[343,1198,1061],{"class":582},[343,1200,846],{"class":529},[343,1202,1203,1205,1207],{"class":345,"line":504},[343,1204,548],{"class":529},[343,1206,593],{"class":551},[343,1208,856],{"class":551},[343,1210,1211],{"class":345,"line":520},[343,1212,602],{"class":529},[343,1214,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233],{"class":345,"line":526},[343,1216,608],{"class":507},[343,1218,611],{"class":507},[343,1220,1084],{"class":614},[343,1222,618],{"class":381},[343,1224,494],{"class":349},[343,1226,624],{"class":381},[343,1228,897],{"class":408},[343,1230,1095],{"class":381},[343,1232,1098],{"class":374},[343,1234,683],{"class":381},[343,1236,1237,1240,1243,1246],{"class":345,"line":533},[343,1238,1239],{"class":381},"        $",[343,1241,1242],{"class":408},"actions ",[343,1244,1245],{"class":381},"=",[343,1247,1248],{"class":381}," [];\n",[343,1250,1251],{"class":345,"line":539},[343,1252,1253],{"class":408},"        \n",[343,1255,1256,1259,1261,1263,1265,1268,1271,1274,1277],{"class":345,"line":545},[343,1257,1258],{"class":568},"        if",[343,1260,666],{"class":381},[343,1262,897],{"class":408},[343,1264,694],{"class":381},[343,1266,1267],{"class":614},"user",[343,1269,1270],{"class":381},"()->",[343,1272,1273],{"class":614},"isAdministrator",[343,1275,1276],{"class":381},"())",[343,1278,683],{"class":381},[343,1280,1281,1284,1286,1289,1291,1293,1295,1297],{"class":345,"line":561},[343,1282,1283],{"class":614},"            array_push",[343,1285,720],{"class":381},[343,1287,1288],{"class":408},"actions",[343,1290,630],{"class":381},[343,1292,511],{"class":349},[343,1294,1114],{"class":381},[343,1296,1117],{"class":614},[343,1298,1299],{"class":381},"())\n",[343,1301,1302],{"class":345,"line":588},[343,1303,788],{"class":381},[343,1305,1306],{"class":345,"line":599},[343,1307,1308],{"class":408},"    \n",[343,1310,1311,1313,1315,1317],{"class":345,"line":605},[343,1312,910],{"class":568},[343,1314,624],{"class":381},[343,1316,1288],{"class":408},[343,1318,392],{"class":381},[343,1320,1321],{"class":345,"line":654},[343,1322,794],{"class":381},[343,1324,1325],{"class":345,"line":660},[343,1326,973],{"class":381},[317,1328,42],{"id":627},[313,1330,1331],{},"Sometimes, you want to directly collect data from your frontend users. This is what fields are made for. You need to define them in your action first:",[334,1333,1335],{"className":366,"code":1334,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Lomkit\\Rest\\Http\\Requests\\RestRequest;\n\nclass SendWelcomeNotificationAction extends Action\n{\n     \u002F**\n     * The action fields.\n     *\n     * @param  \\Lomkit\\Rest\\Http\\Requests\\RestRequest $request\n     * @return array\n     *\u002F\n    public function fields(\\Lomkit\\Rest\\Http\\Requests\\RestRequest $request)\n    {\n        return [\n            'expires_at' => [\n                'required', 'date'\n            ]\n        ];\n    }\n}\n",[325,1336,1337,1353,1357,1377,1393,1413,1437,1441,1451,1455,1460,1464,1468,1496,1504,1508,1542,1546,1552,1564,1580,1584,1588,1592],{"__ignoreMap":339},[343,1338,1339,1341,1343,1345,1347,1349,1351],{"class":345,"line":346},[343,1340,375],{"class":374},[343,1342,378],{"class":349},[343,1344,382],{"class":381},[343,1346,385],{"class":349},[343,1348,382],{"class":381},[343,1350,128],{"class":349},[343,1352,392],{"class":381},[343,1354,1355],{"class":345,"line":395},[343,1356,399],{"emptyLinePlaceholder":398},[343,1358,1359,1361,1363,1365,1367,1369,1371,1373,1375],{"class":345,"line":402},[343,1360,405],{"class":374},[343,1362,409],{"class":408},[343,1364,382],{"class":381},[343,1366,414],{"class":408},[343,1368,382],{"class":381},[343,1370,419],{"class":408},[343,1372,382],{"class":381},[343,1374,424],{"class":408},[343,1376,392],{"class":381},[343,1378,1379,1381,1383,1385,1387,1389,1391],{"class":345,"line":429},[343,1380,405],{"class":374},[343,1382,409],{"class":408},[343,1384,382],{"class":381},[343,1386,438],{"class":408},[343,1388,382],{"class":381},[343,1390,443],{"class":408},[343,1392,392],{"class":381},[343,1394,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":345,"line":448},[343,1396,405],{"class":374},[343,1398,453],{"class":408},[343,1400,382],{"class":381},[343,1402,385],{"class":408},[343,1404,382],{"class":381},[343,1406,128],{"class":408},[343,1408,382],{"class":381},[343,1410,466],{"class":408},[343,1412,392],{"class":381},[343,1414,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435],{"class":345,"line":471},[343,1416,405],{"class":374},[343,1418,453],{"class":408},[343,1420,382],{"class":381},[343,1422,385],{"class":408},[343,1424,382],{"class":381},[343,1426,484],{"class":408},[343,1428,382],{"class":381},[343,1430,489],{"class":408},[343,1432,382],{"class":381},[343,1434,494],{"class":408},[343,1436,392],{"class":381},[343,1438,1439],{"class":345,"line":499},[343,1440,399],{"emptyLinePlaceholder":398},[343,1442,1443,1445,1447,1449],{"class":345,"line":504},[343,1444,508],{"class":507},[343,1446,511],{"class":349},[343,1448,514],{"class":507},[343,1450,517],{"class":349},[343,1452,1453],{"class":345,"line":520},[343,1454,523],{"class":381},[343,1456,1457],{"class":345,"line":526},[343,1458,1459],{"class":529},"     \u002F**\n",[343,1461,1462],{"class":345,"line":533},[343,1463,810],{"class":529},[343,1465,1466],{"class":345,"line":539},[343,1467,542],{"class":529},[343,1469,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494],{"class":345,"line":545},[343,1471,548],{"class":529},[343,1473,552],{"class":551},[343,1475,569],{"class":568},[343,1477,827],{"class":572},[343,1479,382],{"class":568},[343,1481,385],{"class":572},[343,1483,382],{"class":568},[343,1485,484],{"class":572},[343,1487,382],{"class":568},[343,1489,489],{"class":572},[343,1491,382],{"class":568},[343,1493,494],{"class":582},[343,1495,846],{"class":529},[343,1497,1498,1500,1502],{"class":345,"line":561},[343,1499,548],{"class":529},[343,1501,593],{"class":551},[343,1503,856],{"class":551},[343,1505,1506],{"class":345,"line":588},[343,1507,602],{"class":529},[343,1509,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540],{"class":345,"line":599},[343,1511,608],{"class":507},[343,1513,611],{"class":507},[343,1515,871],{"class":614},[343,1517,874],{"class":381},[343,1519,827],{"class":408},[343,1521,382],{"class":381},[343,1523,385],{"class":408},[343,1525,382],{"class":381},[343,1527,484],{"class":408},[343,1529,382],{"class":381},[343,1531,489],{"class":408},[343,1533,382],{"class":381},[343,1535,494],{"class":349},[343,1537,624],{"class":381},[343,1539,897],{"class":408},[343,1541,651],{"class":381},[343,1543,1544],{"class":345,"line":605},[343,1545,657],{"class":381},[343,1547,1548,1550],{"class":345,"line":654},[343,1549,910],{"class":568},[343,1551,913],{"class":381},[343,1553,1554,1556,1558,1560,1562],{"class":345,"line":660},[343,1555,919],{"class":381},[343,1557,731],{"class":353},[343,1559,728],{"class":381},[343,1561,926],{"class":381},[343,1563,913],{"class":381},[343,1565,1566,1568,1570,1572,1574,1576,1578],{"class":345,"line":686},[343,1567,934],{"class":381},[343,1569,937],{"class":353},[343,1571,728],{"class":381},[343,1573,630],{"class":381},[343,1575,944],{"class":381},[343,1577,947],{"class":353},[343,1579,950],{"class":381},[343,1581,1582],{"class":345,"line":739},[343,1583,956],{"class":381},[343,1585,1586],{"class":345,"line":785},[343,1587,962],{"class":381},[343,1589,1590],{"class":345,"line":791},[343,1591,794],{"class":381},[343,1593,1594],{"class":345,"line":797},[343,1595,973],{"class":381},[313,1597,1598],{},"In the returned array, the key should correspond to the field name provided in the call, while the value should represent the desired set of validations for that field. Laravel Rest API automatically validates all fields based on your defined validation rules.",[313,1600,1601,1602,1605,1606,1608],{},"You get those fields in the ",[325,1603,1604],{},"$field"," variable in your ",[325,1607,979],{}," method.",[1610,1611,1612,1638],"note",{},[313,1613,1614,1615,1617,1618,1621,1622,1625,1626,1630,1631,1633,1634,1637],{},"Field rules are evaluated as a standard Laravel validation. This means presence and cross-field rules such as ",[325,1616,937],{},", ",[325,1619,1620],{},"required_if"," and ",[325,1623,1624],{},"present"," fire ",[1627,1628,1629],"strong",{},"even when the field is absent"," from the request — omitting a ",[325,1632,937],{}," field returns a ",[325,1635,1636],{},"422"," response.",[313,1639,1640,1641,1644,1645,1648,1649,1652],{},"Validation errors are keyed by field name under ",[325,1642,1643],{},"fields.{name}"," (for example ",[325,1646,1647],{},"fields.expires_at","), while an unauthorized field name is reported positionally as ",[325,1650,1651],{},"fields.{index}.name",".",[317,1654,1656],{"id":1655},"meta","Meta",[313,1658,1659,1660,1617,1663,1621,1666,1668],{},"Because your actions are exposed to frontend users, they do receive certain information about them, such as ",[325,1661,1662],{},"uriKey",[325,1664,1665],{},"name",[325,1667,627],{},". However, you are also welcome to provide your own data.",[313,1670,1671,1672,1675],{},"You can achieve this by invoking ",[325,1673,1674],{},"withMeta"," within your action's constructor:",[334,1677,1679],{"className":366,"code":1678,"language":350,"meta":339,"style":339},"class SendWelcomeNotificationAction extends Action\n{\n    public function __construct()\n    {\n        $this->withMeta([\n            'color' => '#FFFFFF'\n        ]);\n    }\n}\n",[325,1680,1681,1691,1695,1706,1710,1720,1738,1743,1747],{"__ignoreMap":339},[343,1682,1683,1685,1687,1689],{"class":345,"line":346},[343,1684,508],{"class":507},[343,1686,511],{"class":349},[343,1688,514],{"class":507},[343,1690,517],{"class":349},[343,1692,1693],{"class":345,"line":395},[343,1694,523],{"class":381},[343,1696,1697,1699,1701,1704],{"class":345,"line":402},[343,1698,608],{"class":507},[343,1700,611],{"class":507},[343,1702,1703],{"class":614}," __construct",[343,1705,1120],{"class":381},[343,1707,1708],{"class":345,"line":429},[343,1709,657],{"class":381},[343,1711,1712,1715,1717],{"class":345,"line":448},[343,1713,1714],{"class":381},"        $this->",[343,1716,1674],{"class":614},[343,1718,1719],{"class":381},"([\n",[343,1721,1722,1724,1727,1729,1731,1733,1736],{"class":345,"line":471},[343,1723,919],{"class":381},[343,1725,1726],{"class":353},"color",[343,1728,728],{"class":381},[343,1730,926],{"class":381},[343,1732,944],{"class":381},[343,1734,1735],{"class":353},"#FFFFFF",[343,1737,950],{"class":381},[343,1739,1740],{"class":345,"line":499},[343,1741,1742],{"class":381},"        ]);\n",[343,1744,1745],{"class":345,"line":504},[343,1746,794],{"class":381},[343,1748,1749],{"class":345,"line":520},[343,1750,973],{"class":381},[313,1752,1753],{},"Alternatively, you can call it during the action registration if you wish to define distinct meta information based on the resource:",[334,1755,1757],{"className":366,"code":1756,"language":350,"meta":339,"style":339},"use App\\Rest\\Actions\\SendWelcomeNotificationAction;\n\nclass UserResource extends Resource\n{\n    \u002F**\n     * The actions that should be linked\n     * @param RestRequest $request\n     * @return array\n     *\u002F\n    public function actions(RestRequest $request): array {\n        return [\n            SendWelcomeNotificationAction::make()\n                ->withMeta(['color' => '#FFFFFF'])\n        ];\n    }\n}\n",[325,1758,1759,1779,1783,1793,1797,1801,1805,1815,1823,1827,1849,1855,1865,1891,1895,1899],{"__ignoreMap":339},[343,1760,1761,1763,1765,1767,1769,1771,1773,1775,1777],{"class":345,"line":346},[343,1762,405],{"class":374},[343,1764,378],{"class":408},[343,1766,382],{"class":381},[343,1768,385],{"class":408},[343,1770,382],{"class":381},[343,1772,128],{"class":408},[343,1774,382],{"class":381},[343,1776,1021],{"class":408},[343,1778,392],{"class":381},[343,1780,1781],{"class":345,"line":395},[343,1782,399],{"emptyLinePlaceholder":398},[343,1784,1785,1787,1789,1791],{"class":345,"line":402},[343,1786,508],{"class":507},[343,1788,1034],{"class":349},[343,1790,514],{"class":507},[343,1792,1039],{"class":349},[343,1794,1795],{"class":345,"line":429},[343,1796,523],{"class":381},[343,1798,1799],{"class":345,"line":448},[343,1800,530],{"class":529},[343,1802,1803],{"class":345,"line":471},[343,1804,1052],{"class":529},[343,1806,1807,1809,1811,1813],{"class":345,"line":499},[343,1808,548],{"class":529},[343,1810,552],{"class":551},[343,1812,1061],{"class":582},[343,1814,846],{"class":529},[343,1816,1817,1819,1821],{"class":345,"line":504},[343,1818,548],{"class":529},[343,1820,593],{"class":551},[343,1822,856],{"class":551},[343,1824,1825],{"class":345,"line":520},[343,1826,602],{"class":529},[343,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847],{"class":345,"line":526},[343,1830,608],{"class":507},[343,1832,611],{"class":507},[343,1834,1084],{"class":614},[343,1836,618],{"class":381},[343,1838,494],{"class":349},[343,1840,624],{"class":381},[343,1842,897],{"class":408},[343,1844,1095],{"class":381},[343,1846,1098],{"class":374},[343,1848,683],{"class":381},[343,1850,1851,1853],{"class":345,"line":533},[343,1852,910],{"class":568},[343,1854,913],{"class":381},[343,1856,1857,1859,1861,1863],{"class":345,"line":539},[343,1858,1111],{"class":349},[343,1860,1114],{"class":381},[343,1862,1117],{"class":614},[343,1864,1120],{"class":381},[343,1866,1867,1869,1871,1874,1876,1878,1880,1882,1884,1886,1888],{"class":345,"line":545},[343,1868,742],{"class":381},[343,1870,1674],{"class":614},[343,1872,1873],{"class":381},"([",[343,1875,728],{"class":381},[343,1877,1726],{"class":353},[343,1879,728],{"class":381},[343,1881,926],{"class":381},[343,1883,944],{"class":381},[343,1885,1735],{"class":353},[343,1887,728],{"class":381},[343,1889,1890],{"class":381},"])\n",[343,1892,1893],{"class":345,"line":561},[343,1894,962],{"class":381},[343,1896,1897],{"class":345,"line":588},[343,1898,794],{"class":381},[343,1900,1901],{"class":345,"line":599},[343,1902,973],{"class":381},[317,1904,1906],{"id":1905},"queued-actions","Queued actions",[313,1908,1909,1910,1913],{},"If your actions require a significant amount of processing time, you might want to queue them. To instruct Laravel Rest API to queue your actions dynamically, you should use the ",[325,1911,1912],{},"ShouldQueue"," interface:",[334,1915,1917],{"className":366,"code":1916,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Lomkit\\Rest\\Http\\Requests\\RestRequest;\n\nclass SendWelcomeNotificationAction extends Action implements ShouldQueue\n{\n    \u002F\u002F ...\n}\n",[325,1918,1919,1935,1939,1959,1975,1995,2017,2041,2045,2062,2066,2071],{"__ignoreMap":339},[343,1920,1921,1923,1925,1927,1929,1931,1933],{"class":345,"line":346},[343,1922,375],{"class":374},[343,1924,378],{"class":349},[343,1926,382],{"class":381},[343,1928,385],{"class":349},[343,1930,382],{"class":381},[343,1932,128],{"class":349},[343,1934,392],{"class":381},[343,1936,1937],{"class":345,"line":395},[343,1938,399],{"emptyLinePlaceholder":398},[343,1940,1941,1943,1945,1947,1949,1951,1953,1955,1957],{"class":345,"line":402},[343,1942,405],{"class":374},[343,1944,409],{"class":408},[343,1946,382],{"class":381},[343,1948,414],{"class":408},[343,1950,382],{"class":381},[343,1952,419],{"class":408},[343,1954,382],{"class":381},[343,1956,424],{"class":408},[343,1958,392],{"class":381},[343,1960,1961,1963,1965,1967,1969,1971,1973],{"class":345,"line":429},[343,1962,405],{"class":374},[343,1964,409],{"class":408},[343,1966,382],{"class":381},[343,1968,438],{"class":408},[343,1970,382],{"class":381},[343,1972,443],{"class":408},[343,1974,392],{"class":381},[343,1976,1977,1979,1981,1983,1985,1987,1989,1991,1993],{"class":345,"line":448},[343,1978,405],{"class":374},[343,1980,453],{"class":408},[343,1982,382],{"class":381},[343,1984,385],{"class":408},[343,1986,382],{"class":381},[343,1988,128],{"class":408},[343,1990,382],{"class":381},[343,1992,466],{"class":408},[343,1994,392],{"class":381},[343,1996,1997,1999,2001,2003,2006,2008,2011,2013,2015],{"class":345,"line":471},[343,1998,405],{"class":374},[343,2000,409],{"class":408},[343,2002,382],{"class":381},[343,2004,2005],{"class":408},"Contracts",[343,2007,382],{"class":381},[343,2009,2010],{"class":408},"Queue",[343,2012,382],{"class":381},[343,2014,1912],{"class":408},[343,2016,392],{"class":381},[343,2018,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039],{"class":345,"line":499},[343,2020,405],{"class":374},[343,2022,453],{"class":408},[343,2024,382],{"class":381},[343,2026,385],{"class":408},[343,2028,382],{"class":381},[343,2030,484],{"class":408},[343,2032,382],{"class":381},[343,2034,489],{"class":408},[343,2036,382],{"class":381},[343,2038,494],{"class":408},[343,2040,392],{"class":381},[343,2042,2043],{"class":345,"line":504},[343,2044,399],{"emptyLinePlaceholder":398},[343,2046,2047,2049,2051,2053,2056,2059],{"class":345,"line":520},[343,2048,508],{"class":507},[343,2050,511],{"class":349},[343,2052,514],{"class":507},[343,2054,2055],{"class":349}," Action",[343,2057,2058],{"class":507}," implements",[343,2060,2061],{"class":349}," ShouldQueue\n",[343,2063,2064],{"class":345,"line":526},[343,2065,523],{"class":381},[343,2067,2068],{"class":345,"line":533},[343,2069,2070],{"class":529},"    \u002F\u002F ...\n",[343,2072,2073],{"class":345,"line":539},[343,2074,973],{"class":381},[313,2076,2077,2078,2081,2082,2085],{},"Laravel Rest Api will chunk your results and create a job for each chunk. By default, the chunk size is set to ",[325,2079,2080],{},"100",",\nif you wish to change this, declare the ",[325,2083,2084],{},"chunkCount"," property on your model:",[334,2087,2089],{"className":366,"code":2088,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Lomkit\\Rest\\Http\\Requests\\RestRequest;\n\nclass SendWelcomeNotificationAction extends Action implements ShouldQueue\n{\n    \u002F**\n     * The number of models that should be included in each chunk.\n     *\n     * @var int\n     *\u002F\n    public $chunkCount = 100;\n}\n",[325,2090,2091,2107,2111,2131,2147,2167,2187,2211,2215,2229,2233,2237,2242,2246,2256,2260,2276],{"__ignoreMap":339},[343,2092,2093,2095,2097,2099,2101,2103,2105],{"class":345,"line":346},[343,2094,375],{"class":374},[343,2096,378],{"class":349},[343,2098,382],{"class":381},[343,2100,385],{"class":349},[343,2102,382],{"class":381},[343,2104,128],{"class":349},[343,2106,392],{"class":381},[343,2108,2109],{"class":345,"line":395},[343,2110,399],{"emptyLinePlaceholder":398},[343,2112,2113,2115,2117,2119,2121,2123,2125,2127,2129],{"class":345,"line":402},[343,2114,405],{"class":374},[343,2116,409],{"class":408},[343,2118,382],{"class":381},[343,2120,414],{"class":408},[343,2122,382],{"class":381},[343,2124,419],{"class":408},[343,2126,382],{"class":381},[343,2128,424],{"class":408},[343,2130,392],{"class":381},[343,2132,2133,2135,2137,2139,2141,2143,2145],{"class":345,"line":429},[343,2134,405],{"class":374},[343,2136,409],{"class":408},[343,2138,382],{"class":381},[343,2140,438],{"class":408},[343,2142,382],{"class":381},[343,2144,443],{"class":408},[343,2146,392],{"class":381},[343,2148,2149,2151,2153,2155,2157,2159,2161,2163,2165],{"class":345,"line":448},[343,2150,405],{"class":374},[343,2152,453],{"class":408},[343,2154,382],{"class":381},[343,2156,385],{"class":408},[343,2158,382],{"class":381},[343,2160,128],{"class":408},[343,2162,382],{"class":381},[343,2164,466],{"class":408},[343,2166,392],{"class":381},[343,2168,2169,2171,2173,2175,2177,2179,2181,2183,2185],{"class":345,"line":471},[343,2170,405],{"class":374},[343,2172,409],{"class":408},[343,2174,382],{"class":381},[343,2176,2005],{"class":408},[343,2178,382],{"class":381},[343,2180,2010],{"class":408},[343,2182,382],{"class":381},[343,2184,1912],{"class":408},[343,2186,392],{"class":381},[343,2188,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209],{"class":345,"line":499},[343,2190,405],{"class":374},[343,2192,453],{"class":408},[343,2194,382],{"class":381},[343,2196,385],{"class":408},[343,2198,382],{"class":381},[343,2200,484],{"class":408},[343,2202,382],{"class":381},[343,2204,489],{"class":408},[343,2206,382],{"class":381},[343,2208,494],{"class":408},[343,2210,392],{"class":381},[343,2212,2213],{"class":345,"line":504},[343,2214,399],{"emptyLinePlaceholder":398},[343,2216,2217,2219,2221,2223,2225,2227],{"class":345,"line":520},[343,2218,508],{"class":507},[343,2220,511],{"class":349},[343,2222,514],{"class":507},[343,2224,2055],{"class":349},[343,2226,2058],{"class":507},[343,2228,2061],{"class":349},[343,2230,2231],{"class":345,"line":526},[343,2232,523],{"class":381},[343,2234,2235],{"class":345,"line":533},[343,2236,530],{"class":529},[343,2238,2239],{"class":345,"line":539},[343,2240,2241],{"class":529},"     * The number of models that should be included in each chunk.\n",[343,2243,2244],{"class":345,"line":545},[343,2245,542],{"class":529},[343,2247,2248,2250,2253],{"class":345,"line":561},[343,2249,548],{"class":529},[343,2251,2252],{"class":551},"@var",[343,2254,2255],{"class":551}," int\n",[343,2257,2258],{"class":345,"line":588},[343,2259,602],{"class":529},[343,2261,2262,2264,2266,2269,2271,2274],{"class":345,"line":599},[343,2263,608],{"class":507},[343,2265,624],{"class":381},[343,2267,2268],{"class":408},"chunkCount ",[343,2270,1245],{"class":381},[343,2272,2273],{"class":374}," 100",[343,2275,392],{"class":381},[343,2277,2278],{"class":345,"line":605},[343,2279,973],{"class":381},[1610,2281,2282],{},[313,2283,2284,2285,2287],{},"Chunking is also done when you are not using queue, the ",[325,2286,979],{}," method will be directly called for each chunk.",[1134,2289,2291],{"id":2290},"customizing-the-queue-and-connection","Customizing the queue and connection",[313,2293,2294,2295,1621,2298,2301],{},"You may customize the queue connection and queue name that the action is queued on by setting the ",[325,2296,2297],{},"$connection",[325,2299,2300],{},"$queue"," properties on your class:",[334,2303,2305],{"className":366,"code":2304,"language":350,"meta":339,"style":339},"\nnamespace App\\Rest\\Actions;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Lomkit\\Rest\\Http\\Requests\\RestRequest;\n\nclass SendWelcomeNotificationAction extends Action implements ShouldQueue\n{\n    \u002F**\n     * The name of the connection the job should be sent to.\n     *\n     * @var string|null\n     *\u002F\n    public $connection;\n\n    \u002F**\n     * The name of the queue the job should be sent to.\n     *\n     * @var string|null\n     *\u002F\n    public $queue;\n}\n",[325,2306,2307,2311,2327,2331,2351,2367,2387,2407,2431,2435,2449,2453,2457,2462,2466,2481,2485,2496,2500,2504,2509,2513,2525,2529,2540],{"__ignoreMap":339},[343,2308,2309],{"class":345,"line":346},[343,2310,399],{"emptyLinePlaceholder":398},[343,2312,2313,2315,2317,2319,2321,2323,2325],{"class":345,"line":395},[343,2314,375],{"class":374},[343,2316,378],{"class":349},[343,2318,382],{"class":381},[343,2320,385],{"class":349},[343,2322,382],{"class":381},[343,2324,128],{"class":349},[343,2326,392],{"class":381},[343,2328,2329],{"class":345,"line":402},[343,2330,399],{"emptyLinePlaceholder":398},[343,2332,2333,2335,2337,2339,2341,2343,2345,2347,2349],{"class":345,"line":429},[343,2334,405],{"class":374},[343,2336,409],{"class":408},[343,2338,382],{"class":381},[343,2340,414],{"class":408},[343,2342,382],{"class":381},[343,2344,419],{"class":408},[343,2346,382],{"class":381},[343,2348,424],{"class":408},[343,2350,392],{"class":381},[343,2352,2353,2355,2357,2359,2361,2363,2365],{"class":345,"line":448},[343,2354,405],{"class":374},[343,2356,409],{"class":408},[343,2358,382],{"class":381},[343,2360,438],{"class":408},[343,2362,382],{"class":381},[343,2364,443],{"class":408},[343,2366,392],{"class":381},[343,2368,2369,2371,2373,2375,2377,2379,2381,2383,2385],{"class":345,"line":471},[343,2370,405],{"class":374},[343,2372,453],{"class":408},[343,2374,382],{"class":381},[343,2376,385],{"class":408},[343,2378,382],{"class":381},[343,2380,128],{"class":408},[343,2382,382],{"class":381},[343,2384,466],{"class":408},[343,2386,392],{"class":381},[343,2388,2389,2391,2393,2395,2397,2399,2401,2403,2405],{"class":345,"line":499},[343,2390,405],{"class":374},[343,2392,409],{"class":408},[343,2394,382],{"class":381},[343,2396,2005],{"class":408},[343,2398,382],{"class":381},[343,2400,2010],{"class":408},[343,2402,382],{"class":381},[343,2404,1912],{"class":408},[343,2406,392],{"class":381},[343,2408,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429],{"class":345,"line":504},[343,2410,405],{"class":374},[343,2412,453],{"class":408},[343,2414,382],{"class":381},[343,2416,385],{"class":408},[343,2418,382],{"class":381},[343,2420,484],{"class":408},[343,2422,382],{"class":381},[343,2424,489],{"class":408},[343,2426,382],{"class":381},[343,2428,494],{"class":408},[343,2430,392],{"class":381},[343,2432,2433],{"class":345,"line":520},[343,2434,399],{"emptyLinePlaceholder":398},[343,2436,2437,2439,2441,2443,2445,2447],{"class":345,"line":526},[343,2438,508],{"class":507},[343,2440,511],{"class":349},[343,2442,514],{"class":507},[343,2444,2055],{"class":349},[343,2446,2058],{"class":507},[343,2448,2061],{"class":349},[343,2450,2451],{"class":345,"line":533},[343,2452,523],{"class":381},[343,2454,2455],{"class":345,"line":539},[343,2456,530],{"class":529},[343,2458,2459],{"class":345,"line":545},[343,2460,2461],{"class":529},"     * The name of the connection the job should be sent to.\n",[343,2463,2464],{"class":345,"line":561},[343,2465,542],{"class":529},[343,2467,2468,2470,2472,2475,2478],{"class":345,"line":588},[343,2469,548],{"class":529},[343,2471,2252],{"class":551},[343,2473,2474],{"class":551}," string",[343,2476,2477],{"class":568},"|",[343,2479,2480],{"class":551},"null\n",[343,2482,2483],{"class":345,"line":599},[343,2484,602],{"class":529},[343,2486,2487,2489,2491,2494],{"class":345,"line":605},[343,2488,608],{"class":507},[343,2490,624],{"class":381},[343,2492,2493],{"class":408},"connection",[343,2495,392],{"class":381},[343,2497,2498],{"class":345,"line":654},[343,2499,399],{"emptyLinePlaceholder":398},[343,2501,2502],{"class":345,"line":660},[343,2503,530],{"class":529},[343,2505,2506],{"class":345,"line":686},[343,2507,2508],{"class":529},"     * The name of the queue the job should be sent to.\n",[343,2510,2511],{"class":345,"line":739},[343,2512,542],{"class":529},[343,2514,2515,2517,2519,2521,2523],{"class":345,"line":785},[343,2516,548],{"class":529},[343,2518,2252],{"class":551},[343,2520,2474],{"class":551},[343,2522,2477],{"class":568},[343,2524,2480],{"class":551},[343,2526,2527],{"class":345,"line":791},[343,2528,602],{"class":529},[343,2530,2531,2533,2535,2538],{"class":345,"line":797},[343,2532,608],{"class":507},[343,2534,624],{"class":381},[343,2536,2537],{"class":408},"queue",[343,2539,392],{"class":381},[343,2541,2542],{"class":345,"line":802},[343,2543,973],{"class":381},[1134,2545,2547],{"id":2546},"batchable-actions","Batchable Actions",[313,2549,2550,2551,1621,2554,2556],{},"You may instruct Laravel Rest Api that an action is batchable by using the ",[325,2552,2553],{},"BatchableAction",[325,2555,1912],{}," interfaces on your class:",[334,2558,2560],{"className":366,"code":2559,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Lomkit\\Rest\\Actions\\Action;\nuse Lomkit\\Rest\\Contracts\\BatchableAction;\n\nclass SendWelcomeNotificationAction extends Action implements ShouldQueue, BatchableAction\n{\n     \u002F**\n     * Register callbacks on the pending batch.\n     *\n     * @param  array  $fields\n     * @param  \\Illuminate\\Bus\\PendingBatch  $batch\n     * @return void\n     *\u002F\n    public function withBatch(array $fields, PendingBatch $batch)\n    {\n        $batch->then(function (Batch $batch) {\n            \u002F\u002F ...\n        })->catch(function (Batch $batch, Throwable $e) {\n            \u002F\u002F ...\n        })->finally(function (Batch $batch) {\n            \u002F\u002F ...\n        });\n    }\n}\n",[325,2561,2562,2578,2582,2602,2622,2642,2646,2666,2670,2674,2679,2683,2693,2716,2725,2729,2758,2762,2792,2797,2831,2835,2858,2862,2867,2871],{"__ignoreMap":339},[343,2563,2564,2566,2568,2570,2572,2574,2576],{"class":345,"line":346},[343,2565,375],{"class":374},[343,2567,378],{"class":349},[343,2569,382],{"class":381},[343,2571,385],{"class":349},[343,2573,382],{"class":381},[343,2575,128],{"class":349},[343,2577,392],{"class":381},[343,2579,2580],{"class":345,"line":395},[343,2581,399],{"emptyLinePlaceholder":398},[343,2583,2584,2586,2588,2590,2592,2594,2596,2598,2600],{"class":345,"line":402},[343,2585,405],{"class":374},[343,2587,409],{"class":408},[343,2589,382],{"class":381},[343,2591,2005],{"class":408},[343,2593,382],{"class":381},[343,2595,2010],{"class":408},[343,2597,382],{"class":381},[343,2599,1912],{"class":408},[343,2601,392],{"class":381},[343,2603,2604,2606,2608,2610,2612,2614,2616,2618,2620],{"class":345,"line":429},[343,2605,405],{"class":374},[343,2607,453],{"class":408},[343,2609,382],{"class":381},[343,2611,385],{"class":408},[343,2613,382],{"class":381},[343,2615,128],{"class":408},[343,2617,382],{"class":381},[343,2619,466],{"class":408},[343,2621,392],{"class":381},[343,2623,2624,2626,2628,2630,2632,2634,2636,2638,2640],{"class":345,"line":448},[343,2625,405],{"class":374},[343,2627,453],{"class":408},[343,2629,382],{"class":381},[343,2631,385],{"class":408},[343,2633,382],{"class":381},[343,2635,2005],{"class":408},[343,2637,382],{"class":381},[343,2639,2553],{"class":408},[343,2641,392],{"class":381},[343,2643,2644],{"class":345,"line":471},[343,2645,399],{"emptyLinePlaceholder":398},[343,2647,2648,2650,2652,2654,2656,2658,2661,2663],{"class":345,"line":499},[343,2649,508],{"class":507},[343,2651,511],{"class":349},[343,2653,514],{"class":507},[343,2655,2055],{"class":349},[343,2657,2058],{"class":507},[343,2659,2660],{"class":349}," ShouldQueue",[343,2662,630],{"class":381},[343,2664,2665],{"class":349}," BatchableAction\n",[343,2667,2668],{"class":345,"line":504},[343,2669,523],{"class":381},[343,2671,2672],{"class":345,"line":520},[343,2673,1459],{"class":529},[343,2675,2676],{"class":345,"line":526},[343,2677,2678],{"class":529},"     * Register callbacks on the pending batch.\n",[343,2680,2681],{"class":345,"line":533},[343,2682,542],{"class":529},[343,2684,2685,2687,2689,2691],{"class":345,"line":539},[343,2686,548],{"class":529},[343,2688,552],{"class":551},[343,2690,555],{"class":551},[343,2692,558],{"class":529},[343,2694,2695,2697,2699,2701,2703,2705,2708,2710,2713],{"class":345,"line":545},[343,2696,548],{"class":529},[343,2698,552],{"class":551},[343,2700,569],{"class":568},[343,2702,573],{"class":572},[343,2704,382],{"class":568},[343,2706,2707],{"class":572},"Bus",[343,2709,382],{"class":568},[343,2711,2712],{"class":582},"PendingBatch",[343,2714,2715],{"class":529},"  $batch\n",[343,2717,2718,2720,2722],{"class":345,"line":561},[343,2719,548],{"class":529},[343,2721,593],{"class":551},[343,2723,2724],{"class":551}," void\n",[343,2726,2727],{"class":345,"line":588},[343,2728,602],{"class":529},[343,2730,2731,2733,2735,2738,2740,2742,2744,2746,2748,2751,2753,2756],{"class":345,"line":599},[343,2732,608],{"class":507},[343,2734,611],{"class":507},[343,2736,2737],{"class":614}," withBatch",[343,2739,618],{"class":381},[343,2741,621],{"class":374},[343,2743,624],{"class":381},[343,2745,627],{"class":408},[343,2747,630],{"class":381},[343,2749,2750],{"class":349}," PendingBatch",[343,2752,624],{"class":381},[343,2754,2755],{"class":408},"batch",[343,2757,651],{"class":381},[343,2759,2760],{"class":345,"line":605},[343,2761,657],{"class":381},[343,2763,2764,2766,2768,2770,2773,2775,2778,2781,2784,2786,2788,2790],{"class":345,"line":654},[343,2765,1239],{"class":381},[343,2767,2755],{"class":408},[343,2769,694],{"class":381},[343,2771,2772],{"class":614},"then",[343,2774,618],{"class":381},[343,2776,2777],{"class":507},"function",[343,2779,2780],{"class":381}," (",[343,2782,2783],{"class":349},"Batch",[343,2785,624],{"class":381},[343,2787,2755],{"class":408},[343,2789,680],{"class":381},[343,2791,683],{"class":381},[343,2793,2794],{"class":345,"line":660},[343,2795,2796],{"class":529},"            \u002F\u002F ...\n",[343,2798,2799,2802,2805,2807,2809,2811,2813,2815,2817,2819,2822,2824,2827,2829],{"class":345,"line":686},[343,2800,2801],{"class":381},"        })->",[343,2803,2804],{"class":614},"catch",[343,2806,618],{"class":381},[343,2808,2777],{"class":507},[343,2810,2780],{"class":381},[343,2812,2783],{"class":349},[343,2814,624],{"class":381},[343,2816,2755],{"class":408},[343,2818,630],{"class":381},[343,2820,2821],{"class":349}," Throwable",[343,2823,624],{"class":381},[343,2825,2826],{"class":408},"e",[343,2828,680],{"class":381},[343,2830,683],{"class":381},[343,2832,2833],{"class":345,"line":739},[343,2834,2796],{"class":529},[343,2836,2837,2839,2842,2844,2846,2848,2850,2852,2854,2856],{"class":345,"line":785},[343,2838,2801],{"class":381},[343,2840,2841],{"class":614},"finally",[343,2843,618],{"class":381},[343,2845,2777],{"class":507},[343,2847,2780],{"class":381},[343,2849,2783],{"class":349},[343,2851,624],{"class":381},[343,2853,2755],{"class":408},[343,2855,680],{"class":381},[343,2857,683],{"class":381},[343,2859,2860],{"class":345,"line":791},[343,2861,2796],{"class":529},[343,2863,2864],{"class":345,"line":797},[343,2865,2866],{"class":381},"        });\n",[343,2868,2869],{"class":345,"line":802},[343,2870,794],{"class":381},[343,2872,2873],{"class":345,"line":807},[343,2874,973],{"class":381},[313,2876,2877,2878,2881],{},"The new ",[325,2879,2880],{},"withBatch"," method allows you to register callbacks on your pending batch. This means that these callbacks will be called depending on the batch status.",[313,2883,2884,2885,2887],{},"For example, if you want to send a notification when jobs are successfully completed, you should use the ",[325,2886,2772],{}," method. This method will trigger once at the end of all jobs triggered depending on your chunk size.",[313,2889,2890,2891],{},"If you are not familiar with batches please see the ",[2892,2893,2897],"a",{"href":2894,"rel":2895},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fqueues#job-batching",[2896],"nofollow","Laravel Documentation.",[317,2899,2901],{"id":2900},"standalone-actions","Standalone actions",[313,2903,2904,2905,2908,2909,2912],{},"You may have sometimes an action that does not require any models to run. If you are in this situation, you might want to register the action as\n",[325,2906,2907],{},"standalone"," by invoking the ",[325,2910,2911],{},"standlone"," method when registering the action.",[313,2914,2915,2916,1608],{},"These actions will always receive an empty collection of models in the ",[325,2917,979],{},[334,2919,2921],{"className":366,"code":2920,"language":350,"meta":339,"style":339},"use App\\Rest\\Actions\\ResetPasswordAction;\n\nclass UserResource extends Resource\n{\n    \u002F**\n     * The actions that should be linked\n     * @param RestRequest $request\n     * @return array\n     *\u002F\n    public function actions(RestRequest $request): array {\n        return [\n            ResetPasswordAction::make()->standalone()\n        ];\n    }\n}\n",[325,2922,2923,2944,2948,2958,2962,2966,2970,2980,2988,2992,3014,3020,3035,3039,3043],{"__ignoreMap":339},[343,2924,2925,2927,2929,2931,2933,2935,2937,2939,2942],{"class":345,"line":346},[343,2926,405],{"class":374},[343,2928,378],{"class":408},[343,2930,382],{"class":381},[343,2932,385],{"class":408},[343,2934,382],{"class":381},[343,2936,128],{"class":408},[343,2938,382],{"class":381},[343,2940,2941],{"class":408},"ResetPasswordAction",[343,2943,392],{"class":381},[343,2945,2946],{"class":345,"line":395},[343,2947,399],{"emptyLinePlaceholder":398},[343,2949,2950,2952,2954,2956],{"class":345,"line":402},[343,2951,508],{"class":507},[343,2953,1034],{"class":349},[343,2955,514],{"class":507},[343,2957,1039],{"class":349},[343,2959,2960],{"class":345,"line":429},[343,2961,523],{"class":381},[343,2963,2964],{"class":345,"line":448},[343,2965,530],{"class":529},[343,2967,2968],{"class":345,"line":471},[343,2969,1052],{"class":529},[343,2971,2972,2974,2976,2978],{"class":345,"line":499},[343,2973,548],{"class":529},[343,2975,552],{"class":551},[343,2977,1061],{"class":582},[343,2979,846],{"class":529},[343,2981,2982,2984,2986],{"class":345,"line":504},[343,2983,548],{"class":529},[343,2985,593],{"class":551},[343,2987,856],{"class":551},[343,2989,2990],{"class":345,"line":520},[343,2991,602],{"class":529},[343,2993,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012],{"class":345,"line":526},[343,2995,608],{"class":507},[343,2997,611],{"class":507},[343,2999,1084],{"class":614},[343,3001,618],{"class":381},[343,3003,494],{"class":349},[343,3005,624],{"class":381},[343,3007,897],{"class":408},[343,3009,1095],{"class":381},[343,3011,1098],{"class":374},[343,3013,683],{"class":381},[343,3015,3016,3018],{"class":345,"line":533},[343,3017,910],{"class":568},[343,3019,913],{"class":381},[343,3021,3022,3025,3027,3029,3031,3033],{"class":345,"line":539},[343,3023,3024],{"class":349},"            ResetPasswordAction",[343,3026,1114],{"class":381},[343,3028,1117],{"class":614},[343,3030,1270],{"class":381},[343,3032,2907],{"class":614},[343,3034,1120],{"class":381},[343,3036,3037],{"class":345,"line":545},[343,3038,962],{"class":381},[343,3040,3041],{"class":345,"line":561},[343,3042,794],{"class":381},[343,3044,3045],{"class":345,"line":588},[343,3046,973],{"class":381},[317,3048,3050],{"id":3049},"targeted-actions","Targeted actions",[313,3052,3053,3054,3057,3058,2908,3061,3063,3064,3067],{},"By default an action resolves the models it applies to from the search given by the caller, which means that omitting the search runs the action against ",[1627,3055,3056],{},"every"," model of the resource. When this is not an acceptable outcome, register the action as ",[325,3059,3060],{},"targeted",[325,3062,3060],{}," method. The caller then has to name the models by id in the ",[325,3065,3066],{},"resources"," argument, and providing a search is prohibited.",[334,3069,3071],{"className":366,"code":3070,"language":350,"meta":339,"style":339},"use App\\Rest\\Actions\\DeactivateUsersAction;\n\nclass UserResource extends Resource\n{\n    \u002F**\n     * The actions that should be linked\n     * @param RestRequest $request\n     * @return array\n     *\u002F\n    public function actions(RestRequest $request): array {\n        return [\n            DeactivateUsersAction::make()->targeted()\n        ];\n    }\n}\n",[325,3072,3073,3094,3098,3108,3112,3116,3120,3130,3138,3142,3164,3170,3185,3189,3193],{"__ignoreMap":339},[343,3074,3075,3077,3079,3081,3083,3085,3087,3089,3092],{"class":345,"line":346},[343,3076,405],{"class":374},[343,3078,378],{"class":408},[343,3080,382],{"class":381},[343,3082,385],{"class":408},[343,3084,382],{"class":381},[343,3086,128],{"class":408},[343,3088,382],{"class":381},[343,3090,3091],{"class":408},"DeactivateUsersAction",[343,3093,392],{"class":381},[343,3095,3096],{"class":345,"line":395},[343,3097,399],{"emptyLinePlaceholder":398},[343,3099,3100,3102,3104,3106],{"class":345,"line":402},[343,3101,508],{"class":507},[343,3103,1034],{"class":349},[343,3105,514],{"class":507},[343,3107,1039],{"class":349},[343,3109,3110],{"class":345,"line":429},[343,3111,523],{"class":381},[343,3113,3114],{"class":345,"line":448},[343,3115,530],{"class":529},[343,3117,3118],{"class":345,"line":471},[343,3119,1052],{"class":529},[343,3121,3122,3124,3126,3128],{"class":345,"line":499},[343,3123,548],{"class":529},[343,3125,552],{"class":551},[343,3127,1061],{"class":582},[343,3129,846],{"class":529},[343,3131,3132,3134,3136],{"class":345,"line":504},[343,3133,548],{"class":529},[343,3135,593],{"class":551},[343,3137,856],{"class":551},[343,3139,3140],{"class":345,"line":520},[343,3141,602],{"class":529},[343,3143,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162],{"class":345,"line":526},[343,3145,608],{"class":507},[343,3147,611],{"class":507},[343,3149,1084],{"class":614},[343,3151,618],{"class":381},[343,3153,494],{"class":349},[343,3155,624],{"class":381},[343,3157,897],{"class":408},[343,3159,1095],{"class":381},[343,3161,1098],{"class":374},[343,3163,683],{"class":381},[343,3165,3166,3168],{"class":345,"line":533},[343,3167,910],{"class":568},[343,3169,913],{"class":381},[343,3171,3172,3175,3177,3179,3181,3183],{"class":345,"line":539},[343,3173,3174],{"class":349},"            DeactivateUsersAction",[343,3176,1114],{"class":381},[343,3178,1117],{"class":614},[343,3180,1270],{"class":381},[343,3182,3060],{"class":614},[343,3184,1120],{"class":381},[343,3186,3187],{"class":345,"line":545},[343,3188,962],{"class":381},[343,3190,3191],{"class":345,"line":561},[343,3192,794],{"class":381},[343,3194,3195],{"class":345,"line":588},[343,3196,973],{"class":381},[313,3198,3199,3200,3202],{},"You may also declare the state on the action itself with the ",[325,3201,3060],{}," property:",[334,3204,3206],{"className":366,"code":3205,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Lomkit\\Rest\\Actions\\Action;\n\nclass DeactivateUsersAction extends Action\n{\n    \u002F**\n     * Indicates if the action requires an explicit list of resource ids.\n     *\n     * @var bool\n     *\u002F\n    public $targeted = true;\n}\n",[325,3207,3208,3224,3228,3248,3252,3263,3267,3271,3276,3280,3289,3293,3307],{"__ignoreMap":339},[343,3209,3210,3212,3214,3216,3218,3220,3222],{"class":345,"line":346},[343,3211,375],{"class":374},[343,3213,378],{"class":349},[343,3215,382],{"class":381},[343,3217,385],{"class":349},[343,3219,382],{"class":381},[343,3221,128],{"class":349},[343,3223,392],{"class":381},[343,3225,3226],{"class":345,"line":395},[343,3227,399],{"emptyLinePlaceholder":398},[343,3229,3230,3232,3234,3236,3238,3240,3242,3244,3246],{"class":345,"line":402},[343,3231,405],{"class":374},[343,3233,453],{"class":408},[343,3235,382],{"class":381},[343,3237,385],{"class":408},[343,3239,382],{"class":381},[343,3241,128],{"class":408},[343,3243,382],{"class":381},[343,3245,466],{"class":408},[343,3247,392],{"class":381},[343,3249,3250],{"class":345,"line":429},[343,3251,399],{"emptyLinePlaceholder":398},[343,3253,3254,3256,3259,3261],{"class":345,"line":448},[343,3255,508],{"class":507},[343,3257,3258],{"class":349}," DeactivateUsersAction",[343,3260,514],{"class":507},[343,3262,517],{"class":349},[343,3264,3265],{"class":345,"line":471},[343,3266,523],{"class":381},[343,3268,3269],{"class":345,"line":499},[343,3270,530],{"class":529},[343,3272,3273],{"class":345,"line":504},[343,3274,3275],{"class":529},"     * Indicates if the action requires an explicit list of resource ids.\n",[343,3277,3278],{"class":345,"line":520},[343,3279,542],{"class":529},[343,3281,3282,3284,3286],{"class":345,"line":526},[343,3283,548],{"class":529},[343,3285,2252],{"class":551},[343,3287,3288],{"class":551}," bool\n",[343,3290,3291],{"class":345,"line":533},[343,3292,602],{"class":529},[343,3294,3295,3297,3299,3302,3304],{"class":345,"line":539},[343,3296,608],{"class":507},[343,3298,624],{"class":381},[343,3300,3301],{"class":408},"targeted ",[343,3303,1245],{"class":381},[343,3305,3306],{"class":381}," true;\n",[343,3308,3309],{"class":345,"line":545},[343,3310,973],{"class":381},[313,3312,3313,3314,3318],{},"The targeted models still go through the resource's ",[2892,3315,3317],{"href":3316},"\u002F2.x\u002Fresources\u002Finteractions#search-query","search query",", so an id the current user is not allowed to see is skipped rather than acted on.",[313,3320,3321,3322,3325,3326,3329],{},"Each id is validated with its own existence query, so the number of ids a single request may carry is capped at ",[325,3323,3324],{},"1000",". Declare the ",[325,3327,3328],{},"maxResources"," property to lower it on an action whose blast radius should stay small:",[334,3331,3333],{"className":366,"code":3332,"language":350,"meta":339,"style":339},"namespace App\\Rest\\Actions;\n\nuse Lomkit\\Rest\\Actions\\Action;\n\nclass DeactivateUsersAction extends Action\n{\n    public $targeted = true;\n\n    \u002F**\n     * The maximum number of ids the action accepts per request.\n     *\u002F\n    public int $maxResources = 50;\n}\n",[325,3334,3335,3351,3355,3375,3379,3389,3393,3405,3409,3413,3418,3422,3440],{"__ignoreMap":339},[343,3336,3337,3339,3341,3343,3345,3347,3349],{"class":345,"line":346},[343,3338,375],{"class":374},[343,3340,378],{"class":349},[343,3342,382],{"class":381},[343,3344,385],{"class":349},[343,3346,382],{"class":381},[343,3348,128],{"class":349},[343,3350,392],{"class":381},[343,3352,3353],{"class":345,"line":395},[343,3354,399],{"emptyLinePlaceholder":398},[343,3356,3357,3359,3361,3363,3365,3367,3369,3371,3373],{"class":345,"line":402},[343,3358,405],{"class":374},[343,3360,453],{"class":408},[343,3362,382],{"class":381},[343,3364,385],{"class":408},[343,3366,382],{"class":381},[343,3368,128],{"class":408},[343,3370,382],{"class":381},[343,3372,466],{"class":408},[343,3374,392],{"class":381},[343,3376,3377],{"class":345,"line":429},[343,3378,399],{"emptyLinePlaceholder":398},[343,3380,3381,3383,3385,3387],{"class":345,"line":448},[343,3382,508],{"class":507},[343,3384,3258],{"class":349},[343,3386,514],{"class":507},[343,3388,517],{"class":349},[343,3390,3391],{"class":345,"line":471},[343,3392,523],{"class":381},[343,3394,3395,3397,3399,3401,3403],{"class":345,"line":499},[343,3396,608],{"class":507},[343,3398,624],{"class":381},[343,3400,3301],{"class":408},[343,3402,1245],{"class":381},[343,3404,3306],{"class":381},[343,3406,3407],{"class":345,"line":504},[343,3408,399],{"emptyLinePlaceholder":398},[343,3410,3411],{"class":345,"line":520},[343,3412,530],{"class":529},[343,3414,3415],{"class":345,"line":526},[343,3416,3417],{"class":529},"     * The maximum number of ids the action accepts per request.\n",[343,3419,3420],{"class":345,"line":533},[343,3421,602],{"class":529},[343,3423,3424,3426,3429,3431,3434,3436,3438],{"class":345,"line":539},[343,3425,608],{"class":507},[343,3427,3428],{"class":374}," int",[343,3430,624],{"class":381},[343,3432,3433],{"class":408},"maxResources ",[343,3435,1245],{"class":381},[343,3437,773],{"class":374},[343,3439,392],{"class":381},[343,3441,3442],{"class":345,"line":545},[343,3443,973],{"class":381},[3445,3446,3447],"warning",{},[313,3448,3449,3451,3452,3455,3456,3459],{},[325,3450,3328],{}," is typed on the parent class, so an override must repeat the ",[325,3453,3454],{},"int"," type. Declaring ",[325,3457,3458],{},"public $maxResources = 50;"," without it is a PHP fatal error.",[1610,3461,3462],{},[313,3463,3464,3465,1652],{},"An action cannot be both standalone and targeted, the two states are mutually exclusive. Combining them throws an ",[325,3466,3467],{},"InvalidActionStateException",[3469,3470,3471],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .svl4J, html code.shiki .svl4J{--shiki-light:#F76D47;--shiki-light-font-style:italic;--shiki-default:#F78C6C;--shiki-default-font-style:italic;--shiki-dark:#F78C6C;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":339,"searchDepth":346,"depth":395,"links":3473},[3474,3475,3478,3479,3480,3484,3485],{"id":319,"depth":395,"text":320},{"id":993,"depth":395,"text":994,"children":3476},[3477],{"id":1136,"depth":402,"text":275},{"id":627,"depth":395,"text":42},{"id":1655,"depth":395,"text":1656},{"id":1905,"depth":395,"text":1906,"children":3481},[3482,3483],{"id":2290,"depth":402,"text":2291},{"id":2546,"depth":402,"text":2547},{"id":2900,"depth":395,"text":2901},{"id":3049,"depth":395,"text":3050},"Actions are a way to provide actions for your users with a full integration in Laravel Rest Api. It includes the strong search feature to enable security and power.","md",null,{},{"description":3486},"FBjLqyCaQlcRlc2pWPhiWhM_sY0hC201uFSEnVyFvDA",[3493,3495],{"title":257,"path":258,"stem":259,"description":3494,"children":-1},"Laravel Rest API offers the flexibility to customize certain aspects of its functionality, allowing you to tailor it to your specific needs and leverage its capabilities to your advantage.",{"title":268,"path":269,"stem":270,"description":3496,"children":-1},"Hooks are designed to let you the ability to react on model's lifecycle of your models.",1794181353125]